diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpststorage/inc/cvimpststorageserviceview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpststorage/inc/cvimpststorageserviceview.h Wed Sep 01 12:33:36 2010 +0100 @@ -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 +#include +#include + +#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 &aFirstNameList, + RArray &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