diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpststorage/inc/cvimpststoragevpbkstorehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpststorage/inc/cvimpststoragevpbkstorehandler.h Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,404 @@ +/* +* 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: Class that provides handling of vpbk store +* +*/ + + +#ifndef CVIMPSTSTOTRAGEVPBKSTOREHANDLER_H +#define CVIMPSTSTOTRAGEVPBKSTOREHANDLER_H + +// INCLUDES +#include +#include + +#include "mvimpststoragevpbkstorehandler.h" + +#include +#include +#include +#include +#include +#include + +#include + +// FORWARD DECLARATIONS +class MVPbkContactViewBase; +class MVPbkContactLink; +class CVPbkContactManager; +class MVPbkContactStoreList; +class MVPbkContactView; +class MVPbkStoreContact; +class MVPbkViewContact; +class CVPbkContactLinkArray; +class MVIMPSTStorageVPbkStoreHandler; +class CPbk2SortOrderManager; +class MVPbkContactOperationBase; +class MVPbkBaseContact; +class CVPbkContactLinkArray; + +// CLASS DECLARATION +/** + * vpbk store Handler + * This class implements the use of Virtual Phonebook for XSP Stores + * + * @lib vimpststorage.lib + * @since S60 5.0 + */ +NONSHARABLE_CLASS( CVIMPSTStorageVPbkStoreHandler ) : public CActive, + public MVPbkContactViewObserver, + public MVPbkContactStoreObserver, + public MVPbkContactStoreListObserver, + public MVPbkContactObserver, + public MVPbkBatchOperationObserver, + public MVPbkSingleContactOperationObserver + { + + struct TVIMPSTAvatarData + { + // owns + MVPbkContactLink* iContactLink; + // owns + HBufC8* iAvatarContent; + }; + public: + + /** + * Two-phased constructor. + * + * @param aContactDb, contact database + * @param aListId, Default List ID + * @param aServiceId - Service Id + * @param aServiceName - Service Name + * @param aStorageView, Ref to Storage (CVIMPSTStorageViewId) + */ + static CVIMPSTStorageVPbkStoreHandler* NewL(const TDesC& aContactDb, + const TDesC& aServiceName, + MVIMPSTStorageVPbkStoreHandler& aStoreHandler, + TBool aLocalStore ); + + /** + * Two-phased constructor. + * + * @param aContactDb, contact database + * @param aListId, Default List ID + * @param aServiceId - Service Id + * @param aServiceName - Service Name + * @param aStorageView, Ref to Storage (CVIMPSTStorageViewId) + */ + static CVIMPSTStorageVPbkStoreHandler* NewLC(const TDesC& aContactDb, + const TDesC& aServiceName, + MVIMPSTStorageVPbkStoreHandler& aStoreHandler, + TBool aLocalStore ); + + /** + * Standard C++ destructor + */ + ~CVIMPSTStorageVPbkStoreHandler(); + public : // + /** + * return vpbk store + * @param aUri uri of store + */ + MVPbkContactStore* GetDefaultStoreL( const TDesC& aUri ); + + TInt CreateVPbkContactL( const TDesC& aUserId, + const TDesC& aDisplayName ) ; + + TInt RemoveVPbkContactL(const CVPbkContactLinkArray& aContactLinkArray ) ; + + TInt RetrieveVPbkContactL(const TDesC8& aPackedLinks ); + + TInt UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink, + const TDesC8& aAvatartData ); + + TInt RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact); + + TInt RemoveAllVPbkContactsL(); + + private: // From MVPbkContactViewObserver + + /** + * From MVPbkContactViewObserver + * Callback: Contact view is ready + * + * @since S60 5.0 + * @param aView, view that is ready + */ + void ContactViewReady( MVPbkContactViewBase& aView ); + + /** + * From MVPbkContactViewObserver + * Callback: Contact view is unavailable + * + * @since S60 5.0 + * @param aView, view that is unavailable + */ + void ContactViewUnavailable( MVPbkContactViewBase& aView ); + + /** + * From MVPbkContactViewObserver + * Callback: Contact is added to view + * + * @since S60 5.0 + * @param aView, view that contact was added to + * @param aIndex, position to where the contact was added to + * @param MVPbkContactLink, contact link of the added contact + */ + void ContactAddedToView( MVPbkContactViewBase& aView, + TInt aIndex, const MVPbkContactLink& aContactLink ); + + /** + * From MVPbkContactViewObserver + * Callback: Contact was removed from the view + * + * @since S60 5.0 + * @param aView, view that contact was removed from + * @param aIndex, position from where the contact was removed from + * @param MVPbkContactLink, contact link of the removed contact + */ + void ContactRemovedFromView( MVPbkContactViewBase& aView, + TInt aIndex, const MVPbkContactLink& aContactLink ); + + /** + * From MVPbkContactViewObserver + * Callback: Contact view error + * + * @since S60 5.0 + * @param aView, view that caused the error + * @param aError, error that occured + * @param aErrorNotified, was it notified + */ + void ContactViewError( MVPbkContactViewBase& aView, + TInt aError, TBool aErrorNotified ); + + private: // From MVPbkContactStoreObserver + + /** + * From MVPbkContactStoreObserver + * Callback: Contact store is ready + * + * @since S60 5.0 + * @param aContactStore, contact store + */ + void StoreReady( MVPbkContactStore& aContactStore); + + /** + * From MVPbkContactStoreObserver + * Callback: Store is unavailable + * + * @since S60 5.0 + * @param aContactStore, contact store + * @param aReason, error code + */ + void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason); + + /** + * From MVPbkContactStoreObserver + * Callback: Store event occured + * + * @since S60 5.0 + * @param aContactStore, contact store + * @param aStoreEvent, event + */ + void HandleStoreEventL( MVPbkContactStore& aContactStore , + TVPbkContactStoreEvent aStoreEvent ); + + private: // From MVPbkContactStoreListObserver + + /** + * From MVPbkContactStoreListObserver + * Callback: List open is completed + * + * @since S60 5.0 + */ + void OpenComplete(); + + private: + /** + * From MVPbkContactObserver + */ + void ContactOperationCompleted(TContactOpResult aResult); + + /** + * From MVPbkContactObserver + */ + void ContactOperationFailed( TContactOp aOpCode, + TInt aErrorCode, + TBool aErrorNotified); + + private: // From MVPbkBatchOperationObserver + void StepComplete( MVPbkContactOperationBase& aOperation, + TInt aStepSize ); + TBool StepFailed( MVPbkContactOperationBase& aOperation, + TInt aStepSize, TInt aError ); + void OperationComplete( MVPbkContactOperationBase& aOperation ); + + public: // From MVPbkSingleContactOperationObserver + + /** + * from MVPbkSingleContactOperationObserver. + * Called when the operation is completed. + * + * A client has the operation as a member and it can delete the operation + * instance in this function call. If the implementation of the store + * calls the function from the operation instance it must not handle + * any member data after calling it. + * + * @param aOperation The completed operation. + * @param aContact The contact returned by the operation. + * A client must take the ownership immediately. + * + * NOTE: + * If you use CleanupStack for MVPbkStoreContact + * Use MVPbkStoreContact::PushL or + * CleanupDeletePushL from e32base.h. + * (Do Not Use CleanupStack::PushL(TAny*) because + * then the virtual destructor of the M-class + * won't be called when the object is deleted). + * @since S60 v5.0 + */ + void VPbkSingleContactOperationComplete( + MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact); + + /** + * from MVPbkSingleContactOperationObserver. + * Called if the operation fails. + * + * A client has the operation as a member and it can delete the operation + * instance in this function call. If the implementation of the store + * calls the function from the operation instance it must not handle + * any member data after calling it. + * + * @param aOperation The failed operation. + * @param aError An error code of the failure. + * @since S60 v5.0 + */ + void VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& aOperation, + TInt aError); + + private: // From CActive + void RunL(); + void DoCancel(); + TInt RunError(TInt aError ); + + private: + + /** + * Issues Request + * + */ + void IssueRequest(); + + void HandleContactViewReadyL( MVPbkContactViewBase& aView ); + + void DoHnadleSingleContactOperationCompleteL( MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ); + + void DoHnadleOpenCompleteL(); + + void RetriveFieldDataAndSendEventL(const MVPbkStoreContact& aContact ); + + /** + * destroys the content of RArray. + */ + void ResetAndDestroyRArray(); + + private: // Implementation + + /** + * Standard C++ constructor + */ + CVIMPSTStorageVPbkStoreHandler( MVIMPSTStorageVPbkStoreHandler& aStoreHandler,TBool aLocalStore ); + + /** + * Performs the 2nd phase of construction. + * + * @param aContactDb, contact database address + * @param aServiceName, service Name + */ + void ConstructL( const TDesC& aContactDb,const TDesC& aServiceName ); + + + HBufC* GetContactFieldDataLC(const MVPbkStoreContact& aContact, + TInt aFieldResId ) ; + + /** + * To get the avatar data + * + * @param aContact, contact + * @param aFieldResId, field id + */ + HBufC8* GetContactBinaryFieldDataLC(const MVPbkStoreContact& aContact, + TInt aFieldResId ); + + /** + * check if any pending add contacts + * commit if pending + */ + void CommitNextPendingContactsL() ; + + private: // Data + // Not owns reference to contactStore + MVIMPSTStorageVPbkStoreHandler& iStoreHandler; + // Own: Virtual phonebook + CVPbkContactManager* iContactManager; + // Not own, Contact store list owned by the contact + // manager, do not delete + MVPbkContactStoreList* iStores; + // Not own, Contact store owned by the contact + // manager, do not delete + MVPbkContactStore* iStore; + // Own, contact view containing contacts in store + MVPbkContactView* iContactView; + //OWN: Active scheduler wait for waiting the completion + CActiveSchedulerWait iWait; + // owns : Service store name + HBufC* iStoreName; + // Own, sort order manager + CPbk2SortOrderManager* iSortOrderManager; + // owns : service name + HBufC* iServiceName; + // owns : a vpbk store contact + MVPbkStoreContact* iStoreContact; + // owns : operation contact + MVPbkContactOperationBase* iContactOperation; + // owns : a contact Link; + MVPbkContactLink* iContactLink; + // owns : results + TInt iOperationError; + // owns : Store event type + TVIMPSTVPbkStoreEventType iStoreEventType; + // owns : fetching index + TInt iFetcingIndex; + // owns : adding of contact is in progress + HBufC* iAddIdInProgress; + // ETrue if local store used + TBool iLocalStore; + // is contact operation is in use + TBool iCommitOperationInProgress; + // owns : synch contact which are overlapping or pending contacts + RPointerArray iUnCommittedVPbkContacts; + + // owns : synch avatars which are overlapping or pending avatars + RArray iPendingAvatars; + + }; + +#endif // CVIMPSTSTOTRAGEVPBKSTOREHANDLER_H + +// End of file