diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstdetailsviewplugin/inc/cvimpstdetailscontacthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstdetailsviewplugin/inc/cvimpstdetailscontacthandler.h Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,414 @@ +/* +* 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: contact handler class implementaion to virtual phonebook observers + * +*/ + + +#ifndef CVIMPSTCONTACTHANDLER_H +#define CVIMPSTCONTACTHANDLER_H + +#include +#include +#include +#include + +#include +#include +#include +#include + +// forward declaration +class CVPbkContactManager; +class MVPbkContactLinkArray; +class MVPbkContactLink; +class MVPbkStoreContact; +class MVPbkContactOperationBase; +class MVPbkContactStoreList; +class MVIMPSTDetailsViewContactObserver; +class MCCAParameter; + +enum TStoreType + { + EStoreUnkwon = -1, + EStoreLocal, + EStoreServer + }; +/** + * contact handler class implementaion to virtual phoneboo observers + * @lib vimpstdetailsviewplugin.dll + * @since S60 v5.0 + */ +class CVIMPSTDetailsContactHandler : public CActive, + public MVPbkSingleContactOperationObserver, + public MVPbkContactFindObserver, + public MVPbkContactStoreListObserver + { + + public: + + /** + * Two-phased constructor. + * @param aParameter , reference to plugin parameter + * @param aObserver , reference to contact view class + * @param aServiceStoreUri , service store name + * @return instance of same class + * @since S60 v5.0 + * + */ + static CVIMPSTDetailsContactHandler* NewL( MCCAParameter& aParameter, + MVIMPSTDetailsViewContactObserver& aObserver, + const TDesC& aServiceStoreUri, + const TDesC& aServiceName, + TUint aserviceId); + + /** + * Destructor. + * @since S60 v5.0 + */ + ~CVIMPSTDetailsContactHandler(); + + /** + * set the specified link ,it take the ownership of links. + * @param aLinks , links to set + * @param aReadXspId , need to read xsp id from contacts.cdb or not + * @since S60 v5.0 + */ + void SetLinks( MVPbkContactLinkArray* aLinks,TBool aReadXspId ); + + /** + * @return XSPuserId. + * @since S60 v5.0 + */ + const TDesC& GetXSPUserId(); + + /** + * @return List of all open store. + * @since S60 v5.0 + */ + MVPbkContactStoreList& ContactStoresL(); + + /** + * @return store type + * @since S60 v5.0 + */ + TStoreType StoreType(); + + /** + * @return current iCurrentLink. + * @since S60 v5.0 + */ + MVPbkContactLinkArray* Links() const; + + /** + * cancel the ongoing request. + * @since S60 v5.0 + */ + void CancelOngoingRequest(); + + public: // From CActive + /** + * from CActive. + * @since S60 v5.0 + */ + void RunL(); + + /** + * from CActive. + * @since S60 v5.0 + */ + TInt RunError(TInt aError); + + /** + * from CActive. + * @since S60 v5.0 + */ + void DoCancel(); + + 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); + + public: // From MVPbkContactFindObserver + /** + * Called when find is complete. Caller takes ownership of the results + * In case of an error during find, the aResults may contain only + * partial results of the find + * + * @param aResults Array of contact links that matched the find + * Callee must take ownership of this object in + * the start of the function, ie. in case the + * function leaves the results must be destroyed. + * The find operation can be destroyed at the end + * of this callback. + */ + void FindCompleteL( MVPbkContactLinkArray* aResults ) ; + + /** + * Called in case the find fails for some reason. The find operation + * can be destroyed at the end of this callback. + * + * @param aError One of the system wide error codes. + * KErrNotReady if store is not ready (not open or unavailable) + */ + void FindFailed( TInt aError ) ; + + /* + * get the display name of the contact to show in the status pane + */ + + HBufC* GetDisplayNameLC(); + + private: // From MVPbkContactStoreListObserver + + /** + * from MVPbkContactStoreListObserver + * Called when the opening process is complete. + * + * Before this all stores have sent StoreReady or StoreUnavailable + * event. The client can not trust that all stores are available + * for use when this is called. + * @since S60 v5.0 + */ + void OpenComplete(); + + /** + * from MVPbkContactStoreListObserver + * Called when a contact store is ready to use. + * + * @param aContactStore The store that is ready. + * @since S60 v5.0 + */ + void StoreReady(MVPbkContactStore& aContactStore ); + + /** + * from MVPbkContactStoreListObserver + * Called when a contact store becomes unavailable. + * + * Client may inspect the reason of the unavailability and decide + * whether or not it will keep the store opened (ie. listen to + * the store events). + * + * @param aContactStore The store that became unavailable. + * @param aReason The reason why the store is unavailable. + * This is one of the system wide error codes. + * @since S60 v5.0 + */ + void StoreUnavailable(MVPbkContactStore& aContactStore, TInt aReason ); + + /** + * from MVPbkContactStoreListObserver + * Called when changes occur in the contact store. + * + * @see TVPbkContactStoreEvent + * @param aContactStore A store whose event it is. + * @param aStoreEvent The event that has occurred. + * @since S60 v5.0 + */ + void HandleStoreEventL(MVPbkContactStore& aContactStore, TVPbkContactStoreEvent aStoreEvent ); + + + private: + + /** + * default constructor + * @param aObserver , contact observer + * @since S60 v5.0 + */ + CVIMPSTDetailsContactHandler( MVIMPSTDetailsViewContactObserver& aObserver, TUint aserviceId ); + + /** + * provides two phase constrcution. + * @param aPluginParameter , plugin parameter + * @param aServiceStoreUri , service store name + * @since S60 v5.0 + */ + void ConstructL( MCCAParameter& aParameter, const TDesC& aServiceStoreUri, const TDesC& aServiceName ); + + /** + * helper method for issue pending request. + * @param aError , error if any + * @since S60 v5.0 + */ + void IssueRequest(TInt aError = KErrNone); + + /* API to be used for local store only + * to check whether the phonebook contact is a buddy the service installed + * @ param aCurrentLink of the phonebook contact + * return ETrue if the link is a buddy of that service + * @since S60 v5.0 + */ + TBool CheckWhetherValidLocalLinkL( + const MVPbkContactLink& aCurrentLink ); + + /* API to be used for local store service only + * to check whether the local %service_name%.db (which has contact identifiers) + * exsists already + */ + TBool DbExists(); + /* API to be used for local store only + * open's the local %service_name%.db file + */ + void OpenDbL(); + + /* API to be used for local store only + * close's the local %service_name%.db file + */ + void CloseDb(); + + /* API to be used for local store only + * search the identifier aIdentifier passed in the ColNo aColNo of the db file + * return ETrue if the identifier is found in the db col + * @since S60 v5.0 + */ + TBool SeekRowL( TDbColNo aColNo, TInt32& aIdentifier ); + + /* API to be used for local store only + * open db table + * @since S60 v5.0 + */ + void OpenTableL(); + + + private: // data + + /** + * Not own : Reference to details view plugin + */ + MVIMPSTDetailsViewContactObserver& iObserver; + + /** + * own :Reference to contact manager. + */ + CVPbkContactManager* iContactManager; + + /** + * owns : reference to link array + */ + MVPbkContactLinkArray* iLinks; + + /** + * not owns : reference to contact link which is owned by iLinks + */ + const MVPbkContactLink* iCurrentLink; + + /** + * owns : reference to operation base contact + */ + MVPbkContactOperationBase* iRetrieveOperation; + + /** + * owns : extracted user id from pbk xsp id + */ + HBufC* iXSPUserId; + + /** + * owns : if ETrue , xsp id need to read + */ + TBool iReadXspId; + + /** + * owns : list of open store + */ + MVPbkContactStoreList* iStoreList; + + /** + * owns : reference to active chedular + */ + CActiveSchedulerWait iWait; + + /** + * owns : service store uri + */ + HBufC* iServiceStoreUri; + + + /** + * Owned : Pointer to MVPbkStoreContact + */ + MVPbkStoreContact* iStoreContact; + + // owns : store type + TStoreType iStoreType; + + // owns, service name + HBufC* iServiceName; + + + //Ownns - DB Store + CPermanentFileStore* iFileStore; + + //File Stream + RFs iFs; + + //DataBase Object for Creating/Opening/Closing DB + RDbStoreDatabase iDb; + + // current column set + CDbColSet* iColset; // owned + + + RDbTable iTable; // current table + + // own , contact id converter to and from link + CVPbkContactIdConverter* iIdConverter; + + TUint iServiceId; + + }; + +#endif // CVIMPSTCONTACTHANDLER_H + +// End of File