--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpststorage/inc/cvimpststorageserviceview.h Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,454 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Storage view implementation
+*
+*/
+
+#ifndef CVIMPSTSTORAGESERVICEVIEW_H
+#define CVIMPSTSTORAGESERVICEVIEW_H
+
+
+// INCLUDES
+#include <e32std.h>
+#include <f32file.h>
+#include <babackup.h>
+
+#include "mvimpststorageserviceview.h"
+#include "tvimpststoragepanics.h"
+#include "tvimpstenums.h"
+#include "mvimpststorageitemmodel.h"
+#include "mvimpststorageactiveobserver.h"
+
+// FORWARD DECLARATIONS
+class CVIMPSTStorageContactList;
+class CVIMPSTStorageContactSorter;
+class MVIMPSTStorageVPbkContactStore;
+class MVPbkContactLink;
+class CVIMPSTStorageActiveHandler;
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS ( CVIMPSTStorageServiceView ): public CBase,
+ public MVIMPSTStorageServiceView,
+ public MVIMPSTStorageServiceCacheWriter,
+ public MVIMPSTStorageItemModel,
+ public MVIMPSTStorageActiveObserver
+
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CVIMPSTStorageServiceView* NewL(TUint32 aServiceId, const TDesC& aStoreName,
+ const TDesC& aServiceName);
+
+ /**
+ * Destructor.
+ */
+ ~CVIMPSTStorageServiceView();
+
+ public: // New functions
+
+
+ TUint32 GetServiceId();
+
+ public: // Functions from base classes
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ void AddObserverL( MVIMPSTStorageContactsObserver* aObserver ) ;
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ void RemoveObserver( MVIMPSTStorageContactsObserver* aObserver ) ;
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ MVIMPSTStorageContact* FindContactByUserId( const TDesC& aUserId ) ;
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ MVIMPSTStorageContact* FindContactByLink(const MVPbkContactLink& aContactLink ) ;
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ TInt ListCount() const ;
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ MVIMPSTStorageContactList& ListAt( TInt aIndex ) const ;
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ MVIMPSTStorageContactList* FindContactList( const TDesC& aListId ) ;
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ MVIMPSTStorageContactList* CreateContactListL( const TDesC& aContactListId,
+ const TDesC& aDisplayName ) ;
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ void RemoveContactList( const TDesC& aContactListId ) ;
+
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ TInt ContactCount( TBool aSkipOfflineContacts = EFalse ) const ;
+
+
+ /**
+ * Update presence information of contact.
+ * @param aContactId Id of contact which presence is updated.
+ * @param aStatus. New presence status
+ * @param aAlias. New alias.
+ * @param aStatusText New status message text.
+ * @return MVIMPSTStorageContact* pointer of the contact
+ */
+ MVIMPSTStorageContact* UpdatePresenceL(const TDesC& aContactId,
+ TVIMPSTEnums::TOnlineStatus aStatus,
+ const TDesC& aStatusText,
+ const TDesC8& aAvatarData,
+ TBool aIsClearingAvatar = EFalse) ;
+
+ /**
+ * Update presence information of contact.
+ * @param aContactId Id of contact which presence is updated.
+ * @param aStatus. New presence status
+ * @param aAlias. New alias.
+ * @param aStatusText New status message text.
+ * @return MVIMPSTStorageContact* pointer of the contact
+ */
+ MVIMPSTStorageContact* UpdateAvatarL(const TDesC& aContactId,
+ const TDesC8& aAvatarData ) ;
+
+ /**
+ * add contact ot the virtual phonebook.
+ * @param aContact contact id to be added.
+ */
+ MVIMPSTStorageContact* CreateNewContactL(const TDesC& aUserId,
+ const TDesC& aDisplayName = KNullDesC,
+ TBool aIsInvitationItem = EFalse,
+ TBool aInvitationAutoAccept = EFalse) ;
+
+ /**
+ * add contact ot the virtual phonebook.
+ * @param aContact contact id to be added.
+ */
+ TInt CreateNewContactFromRetrivedIdL( TInt aIndexToUse );
+
+ /**
+ * remove contact ot the virtual phonebook.
+ * @param aContact contact id to be removed.
+ */
+ TInt DeleteNewContactFromRetrivedIdL( TInt aIndexToUse );
+
+ /**
+ * add contact ot the virtual phonebook.
+ * @param aContact contact id to be added.
+ */
+ void CreateNewFetchContactsL( RArray <TPtrC> &aFirstNameList,
+ RArray <TPtrC> &aServiceField ) ;
+
+
+ /**
+ * add contact ot the virtual phonebook.
+ * @param aContact contact id to be added.
+ */
+ TInt RemoveContactL( MVIMPSTStorageContact* aContact ) ;
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ TBool IsLocalStore() const ;
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ void SetOwnUserIdL( const TDesC& aUserId );
+
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ TInt RetriveLinkXSPIdsL(const TDesC8& aContactPackLink );
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ const TDesC& GetRetrieveXSPIdL(TInt aIndex ) ;
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ MVIMPSTStorageContact& OwnContactL();
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ void DeleteDatabaseL();
+
+ /**
+ * From MVIMPSTStorageServiceView
+ */
+ void SetUnnamedTextL(HBufC* aUnnamedText );
+
+ public: // MVIMPSTStorageServiceCacheWriter
+
+ /**
+ * update existing contact
+ * @param aContactLink contact id to be updatated
+ * @param aUserId contact id to be updated
+ * @param aDisplayName contact display name to be updated
+ * @reurn the storage contact pointer if found else NULL
+ */
+ MVIMPSTStorageContact* UpdateCacheContactL(const MVPbkContactLink& aContactLink,
+ const TDesC& aUserId,
+ const TDesC& aDisplayName,
+ const TDesC8& aAvatarContent ) ;
+
+ /**
+ * add a new contact to cache
+ * @param aContactLink contact id to be add
+ * @param aUserId contact id to be add
+ * @param aDisplayName contact display name to be add
+ * @reurn the new storage contact pointer if contact is already exist return the smae
+
+ */
+ MVIMPSTStorageContact* AddContactToCacheL(const MVPbkContactLink& aContactLink,
+ const TDesC& aUserId,
+ const TDesC& aDisplayName,
+ const TDesC8& aAvatarContent,
+ TVIMPSTEnums::TVIMPSTStorgaeEventType aType ) ;
+
+ /*
+ * remopve existing contact
+ * @param aContactLink contact id to be removed
+ * @param aUserId contact id to be removed
+ * @param aDisplayName contact display name to be removed
+ * @reurn the error if any
+ */
+ TInt RemoveContactFromCacheL(const MVPbkContactLink& aContactLink,TVIMPSTEnums::TVIMPSTStorgaeEventType aType ) ;
+
+
+ /**
+ * Removes all contacts from cache and notify to observers
+ */
+ void RemoveAllCacheContactsL() ;
+
+ /**
+ * Read the default contact list if exist else create default list
+ * @return contact list pointer
+ */
+ MVIMPSTStorageContactList* GetDefaultContactListL() ;
+
+ /**
+ * find contact by user id
+ * @param aUserId contact id to be find
+ * @return storage contact pointer if found else NULL
+ */
+ MVIMPSTStorageContact* FindCacheContactByUserId( const TDesC& aUserId ) ;
+
+
+ /**
+ * find contact by user id
+ * @param aContactLink contact link to be find
+ * @return storage contact pointer if found else NULL
+ */
+ MVIMPSTStorageContact* FindCacheContactByLink(const MVPbkContactLink& aContactLink) ;
+
+ /**
+ * add contact to the contact cache and notify the observers
+ * @param aContact contact id to be added.
+ */
+ TInt AddStorageContactToCacheL(MVIMPSTStorageContact* aContactToAdd );
+
+ /**
+ * add contact to the contact cache and notify the observers
+ * @param aContact contact id to be added.
+ */
+ void NotifyServiceViewL( TVIMPSTEnums::TVIMPSTStorgaeEventType aEventType,
+ MVIMPSTStorageContact* aContact = NULL ) ;
+
+ public : //MVIMPSTStorageActiveObserver
+
+ /**
+ * This call is made when the waiting completes
+ * @param aError error code for waiting error, KErrNone if completes without error
+ *
+ */
+ void HandleDelayedNotificationL(TVIMPSTEnums::TVIMPSTStorgaeEventType aType,
+ MVIMPSTStorageContactList *aList,
+ MVIMPSTStorageContact* aContact,
+ TInt aContactIndex) ;
+ private:
+
+
+ /**
+ * C++ default constructor.
+ */
+ CVIMPSTStorageServiceView(TUint32 aServiceId);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(const TDesC& aStoreName, const TDesC& aServiceName);
+
+
+ CVIMPSTStorageContactList* FindContactListInternal( const TDesC& aListId );
+
+
+ TInt FindContactListById(const TDesC& aListId );
+
+ // TLinearOrder
+ static TInt ContactListOrderByDisplayName(
+ const CVIMPSTStorageContactList& aContactA,
+ const CVIMPSTStorageContactList& aContactB );
+
+ static TBool ContactListFindByContactListId(
+ const CVIMPSTStorageContactList& aContactA,
+ const CVIMPSTStorageContactList& aContactB );
+
+
+ /**
+ * Notify all the observers about the given event
+ * @param aType The type of observer event
+ * @param aContact The contact in question
+ * (or -1 == KCAStorageDontKnowPos to force search for given contact id
+ * in aParameter)
+ * @param aFromPEC, ETrue, if event is coming from PEC
+ */
+ void NotifyAllObserversL( TVIMPSTEnums::TVIMPSTStorgaeEventType aType,
+ MVIMPSTStorageContactList* aContactList,
+ MVIMPSTStorageContact* aContact,
+ TInt aContactIndex );
+
+ /**
+ * Notify all the observer about the given event after small delay
+ * If new notify events come during delay, then notify is "shifted"
+ * with new delay time and notify event is change to "multiplechanges".
+ * @param aType The type of observer event
+ * @param aContact The contact in question
+ * (or -1 == KCAStorageDontKnowPos to force search for given contact id
+ * in aParameter)
+ * @param aFromPEC, ETrue, if event is coming from PEC
+ */
+ void NotifyAllObserversWithDelay( TVIMPSTEnums::TVIMPSTStorgaeEventType aType,
+ MVIMPSTStorageContactList* aContactList,
+ MVIMPSTStorageContact* aContact,
+ TInt aContactIndex );
+
+
+ public : // from MVIMPSTStorageItemModel
+
+ /**
+ * @return Count of items
+ */
+ TInt Count() const;
+
+ /**
+ * Returns List item at given index.
+ * @param aIndex
+ * @return List item
+ */
+ MVIMPSTStorageItemModel::SItem Item( TInt aIndex ) const;
+
+ /**
+ * @see MVIMPSTStorageItemModel
+ */
+ TInt IndexOfContact( MVIMPSTStorageContact* aContact ) const;
+
+ /**
+ * @see MVIMPSTStorageItemModel
+ */
+ TInt IndexOfList( MVIMPSTStorageContactList* aList,
+ TBool aIgnoreOwnItem /*= EFalse*/,
+ TBool aIgnoreEmptyLists /*= ETrue*/ ) const;
+
+ public :
+
+ /**
+ * Sets the correct sorting method to storage
+ * according to current setting value
+ */
+ void SetSort();
+
+ /**
+ * sort the contacts of list
+ * according to current setting value
+ */
+ void Sort( const TDesC& aContactListId = KNullDesC );
+
+
+ protected: // Functions from MDesCArray
+
+ /**
+ * @see MDesCArray
+ */
+ TInt MdcaCount() const;
+
+ /**
+ * @see MDesCArray
+ */
+ TPtrC MdcaPoint(TInt aIndex) const;
+
+ private: // Data
+
+ // observers list, used with MVIMPSTStorageServiceView inherited methods
+ RPointerArray< MVIMPSTStorageContactsObserver > iContactObservers;
+
+ // list of contacts
+ RPointerArray< CVIMPSTStorageContactList > iContactListArray; // owns
+
+ //Service ID
+ TUint32 iServiceId;
+ // owns : pointer to service store ,Local/Server
+ MVIMPSTStorageVPbkContactStore* iVPbkContactStore;
+
+ /// Sorter for contacts. Owns
+ CVIMPSTStorageContactSorter* iContactSorter;
+
+ /// Contact for own data
+ MVIMPSTStorageContact* iOwnContact;
+ /// Owns : refreshTimer
+ CVIMPSTStorageActiveHandler* iActiveHandler;
+
+ // if ETrue meaning a invitation is getting added to cache
+ TBool iIsInvitationItem;
+
+ // owns : unnamed text
+ HBufC* iUnNamedText;
+
+ };
+
+#endif // CVIMPSTSTORAGESERVICEVIEW_H
+
+// End of File