diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpststorage/inc/cvimpststoragevpbklocalstore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpststorage/inc/cvimpststoragevpbklocalstore.h Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,329 @@ +/* +* 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 local store +* +*/ + + +#ifndef C_CVIMPSTSTORAGELOCALSTORE_H +#define C_CVIMPSTSTORAGELOCALSTORE_H + +#include +#include +#include + +#include "mvimpststoragevpbkcontactstore.h" +#include "mvimpststoragevpbkstorehandler.h" + +//forward declaration +class CVIMPSTStorageVPbkStoreHandler; +class MVPbkViewContact; +class CVPbkContactIdConverter; +class MVIMPSTStorageVPbkStoreHandler; +class MVIMPSTStorageServiceCacheWriter; +class MVPbkContactLink; +class MVPbkStoreContact; +class CVPbkContactLinkArray; +class MVIMPSTStorageContact; + +// CLASS DECLARATION +/** + * vpbk local store + * This class implements the use of Virtual Phonebook for Local Store(Contacts.cdb) + * + * @lib vimpststorage.lib + * @since S60 5.0 + */ +NONSHARABLE_CLASS( CVIMPSTStorageVPbkLocalStore ) : public CActive, + public MVIMPSTStorageVPbkContactStore, + public MVIMPSTStorageVPbkStoreHandler + + + { + + 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 CVIMPSTStorageVPbkLocalStore* NewL(const TDesC& aContactDb, const TDesC& aServiceName, + MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ); + + /** + * 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 CVIMPSTStorageVPbkLocalStore* NewLC( const TDesC& aContactDb, const TDesC& aServiceName, + MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ); + + /** + * Standard C++ destructor + */ + ~CVIMPSTStorageVPbkLocalStore(); + + public: // from MVIMPSTStorageVPbkContactStore + + /** + * See @MVIMPSTStorageVPbkContactStore + * @ return ETrue + **/ + TBool LocalStore() const ; + + TInt CreateVPbkContactL( const TDesC& aUserId, + const TDesC& aDisplayName, + TBool aInvitationAutoAccept = EFalse) ; + + TInt RemoveVPbkContactL(const MVPbkContactLink& aContactLink) ; + + TInt RemoveVPbkContactsL(const MVPbkContactLink& aContactLink) ; + + TInt RetrieveVPbkXSPIdL(const TDesC8& aPackedLinks ) ; + + TInt CreateRetriveVPbkContactL(TInt aIndexToUse ) ; + + TInt deleteRetriveVPbkContactL(TInt aIndexToUse ) ; + + TInt UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink, + const TDesC8& aAvatartData ); + + TInt RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact); + + + void AddVPbkFetchContactsL( RArray &aFirstNameList, + RArray &aServiceField ) ; + + TInt RemoveAllVPbkContactsL() ; + + const TDesC& GetRetrieveVPbkXSPIdL(TInt aIndex ) ; + + void DeleteDatabaseL() ; + + public : // MVIMPSTStorageVPbkStoreHandler + /** + * From MVPbkContactStoreObserver + * Callback: Store event occured + * + * @since S60 5.0 + * @param aContactStore, contact store + * @param aStoreEvent, event + */ + void HandleVPbkStoreEventL(TVIMPSTVPbkStoreEvent aVPbkStoreEvent) ; + + private: // From CActive + void RunL(); + void DoCancel(); + TInt RunError(TInt aError ); + + private: + + /** + * Issues Request + * + */ + void IssueRequest(); + + + private: + + /** + * Check if database exists + * @return ETrue, if database exists. + */ + TBool DbExists(); + + /** + * Creates new CPermanentFileStore stream and creates database on it. + */ + void CreateDbL(); + + /** + * Open existing database. + */ + + void OpenDbL(); + + + /** + * Close database. + */ + void CloseDb(); + + /* + * Create tables to database + */ + void CreateTablesL(); + + + /** + * Add a column to colset + * @param aName Name of column + * @param aType Type of column + * @param aColset Colset, where column is added. + * @param aMaxLength Maximum column length + * 0 = use columns default value + */ + void AddColumnL( const TDesC& aName, TDbColType aType, + CDbColSet* aColset ); + + + /* + * Leaves if free diskspace is low. + * @param aSize amount of free diskspace needed. + */ + void DoFreespaceLevelCheckL( TInt aSize ); + + + /** + * Opens database table + */ + void OpenTableL(); + + /** + * Closes database table + */ + void CloseTable(); + + + /** + * Seek a specific row with given contactlink in the database file. + * @param aColNo The column number (KContactLink) + * @param aContactLink - Packed Contact Link + * @return ETrue if seek successful, otherwise EFalse + */ + TBool SeekRowL( TDbColNo aColNo, TDesC8& aContactLink ); + + + /** + * Seek a specific row with given contact identifier in the database file. + * @param aColNo The column number (KContactId) + * @param aContactId - Contact identifier + * @return ETrue if seek successful, otherwise EFalse + */ + TBool SeekRowL( TDbColNo aColNo, TInt32& aContactId ); + + + /** + * Write the given data to the database file + * @param aContactLink - Packed Contact Link + * @param aIdentifier - Contact identifier + */ + void WriteToStoreDbL( TInt32& aIdentifier ); + + + /** + * Reads first contact from storage + * @param aContactLink - Packed Contact Link + * @return KErrNone, if successful. + */ + void ReadCurrentL( TInt32& aContactLink); + + + /** + * Reads next contact from storage + * @param aContactLink - Packed Contact Link + * @return KErrNone, if successful. + */ + TInt ReadNextL( TInt32& aContactId ); + + /** + * Reads first contact from storage + * @param aContactLink - Packed Contact Link + * @return KErrNone, if successful. + */ + TInt ReadFirstL( TInt32& aContactLink ); + + + /* + * Deletes contact from storage + * @param aContactId - Contact Identifier of the Contact to Delete + */ + void DeleteContactFromInternalStoreL( TInt32& aContactId ); + + void DeleteAllContactFromInternalStoreL(); + + + private: // Implementation + + /** + * Standard C++ constructor + */ + CVIMPSTStorageVPbkLocalStore(MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter); + + /** + * Performs the 2nd phase of construction. + * + * @param aContactDb, contact database address + * @param aServiceName, service name + */ + void ConstructL(const TDesC& aContactDb, const TDesC& aServiceName ); + + /* + * helper method for deleting entry from iFetchContactsToBeAdded + */ + void ResetAndDestroyLocalArrayL(); + + /* + * compare both string without colon part + * return ETrue if both contact are same + */ + TBool IsSameContactIdL(const TDesC& aFirstId, const TDesC& aSecondId ); + + private: // Data + + MVIMPSTStorageServiceCacheWriter& iServiceCacheWriter; + // Own: pointer to a class which interact with Virtual phonebook + CVIMPSTStorageVPbkStoreHandler* iVPbkStoreHandler; + + // own , contact id converter to and from link + CVPbkContactIdConverter* iIdConverter; + + //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 + + HBufC* iLocalDBName; + + RArray iFetchContactsToBeAdded; + + TVIMPSTFetchingSteps iFetchStep; + + RPointerArray iRetrivedContactArray; + // owns : id of invitation geting accepted + HBufC* iInviteId; + }; + +#endif // C_CVIMPSTSTORAGELOCALSTORE_H + +// End of file