--- /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 <e32base.h>
+#include <cntdef.h>
+
+#include "mvimpststoragevpbkstorehandler.h"
+
+#include <MVPbkContactViewObserver.h>
+#include <MVPbkContactStoreObserver.h>
+#include <MVPbkContactStoreListObserver.h>
+#include <MVPbkContactObserver.h>
+#include <MVPbkBatchOperationObserver.h>
+#include <MVPbkSingleContactOperationObserver.h>
+
+#include <badesca.h>
+
+// 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<MVPbkStoreContact> iUnCommittedVPbkContacts;
+
+ // owns : synch avatars which are overlapping or pending avatars
+ RArray<TVIMPSTAvatarData> iPendingAvatars;
+
+ };
+
+#endif // CVIMPSTSTOTRAGEVPBKSTOREHANDLER_H
+
+// End of file