diff -r 000000000000 -r dab8a81a92de omads/omadsextensions/adapters/mms/inc/mmsdatastore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsextensions/adapters/mms/inc/mmsdatastore.h Mon Nov 23 14:46:41 2009 +0200 @@ -0,0 +1,359 @@ +/* +* Copyright (c) 2005-2007 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: Part of SyncML Data Synchronization Plug In Adapter +* +*/ + + + +#ifndef __MMSDATASTORE_H__ +#define __MMSDATASTORE_H__ + +// INCLUDES +#include +#include "mmsdataproviderdefs.h" +#include "changefinder.h" + + +// FORWARD DECLARATIONS +class CMsvSession; +class CNSmlDataItemUidSet; +class CMmsCodecClient; +class CMmsAdapterMsvApi; +class CMsvOperationActiveSchedulerWait; +class TNSmlSnapshotItem; +class COMADSFolderObject; + +/** +* @brief This class is derived from ECom Data Store plugin-interface (CSmlDataStore). +* It performs the actual synchronization commands, which are received from +* the DS engine. +*/ +class CMmsDataStore : public CSmlDataStore + { +public: + + /** + * Constructor + * + * @return CMmsDataStore*, a new CSmsDataStore instance. + */ + static CMmsDataStore* NewL(CMsvSession &aMsvSession); + + /** + * Destructor + */ + virtual ~CMmsDataStore(); + +protected: + + // Virtual functionality from CSmlDataStore, for comments see the CSmlDataStore header file + virtual void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus); + virtual void DoCancelRequest(); + virtual const TDesC& DoStoreName() const; + virtual void DoBeginTransactionL(); + virtual void DoCommitTransactionL(TRequestStatus& aStatus); + virtual void DoRevertTransaction(TRequestStatus& aStatus); + virtual void DoBeginBatchL(); + virtual void DoCommitBatchL(RArray& aResultArray, TRequestStatus& aStatus); + virtual void DoCancelBatch(); + virtual void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat); + virtual void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize); + virtual TInt DoMaxObjectSize() const; + virtual void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize, + TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus); + virtual void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent, + const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus); + virtual void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent, + TBool aFieldChange, TRequestStatus& aStatus); + virtual void DoReadItemL(TDes8& aBuffer); + virtual void DoWriteItemL(const TDesC8& aData); + virtual void DoCommitItemL(TRequestStatus& aStatus); + virtual void DoCloseItem(); + virtual void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus); + virtual void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus); + virtual void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus); + virtual void DoDeleteAllItemsL(TRequestStatus& aStatus); + virtual TBool DoHasSyncHistory() const; + virtual const MSmlDataItemUidSet& DoAddedItems() const; + virtual const MSmlDataItemUidSet& DoDeletedItems() const; + virtual const MSmlDataItemUidSet& DoSoftDeletedItems() const; + virtual const MSmlDataItemUidSet& DoModifiedItems() const; + virtual const MSmlDataItemUidSet& DoMovedItems() const; + virtual void DoResetChangeInfoL(TRequestStatus& aStatus); + virtual void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems); + virtual void DoCommitChangeInfoL(TRequestStatus& aStatus); + +private: + + /** + * C++ Constructor. + */ + CMmsDataStore(); + + /** + * 2nd-phase Constructor. + * + * @param aMsvSession IN: a session handle to message store + */ + void ConstructL(CMsvSession &aMsvSession); + + /** + * Registers snapshot to ChangeFinder. + */ + void RegisterSnapshotL() const; + + /** + * Registers a single folder to snapshot, used by RegisterSnapshotL. + * + * @param aSnapshot IN: a snapshot item array. + * @param aId IN: folder id. + * @return TInt, Not used. + */ + TInt RegisterFolderL(CSnapshotArray* aSnapshot, const TMsvId& aId) const; + + /** + * Deletes all messages in a specified folder + * + * @param aId IN: a folder id, which is to be emptied + * @return TInt, not used. + */ + TInt DeleteAllMessagesInFolderL(TMsvId aId); + + /** + * Checks whether the specified MMS message exists in message store. + * + * @param aId IN: message ID + * @return TBool, ETrue if the item id exists in the message store. Otherwise EFalse. + */ + TBool MmsItemExists(TMsvId aUid); + + /** + * This function resolves the status bits from the message entry + * + * @param aUnread IN: the status bits are determined from this value + * @return TUint8, Status byte. + */ + TUint8 ResolveStatusBits(TBool aUnread); + + /** + * This function reads data of opened message from MMS engine to client buffer. + * Data is retriveved from MMS engine in chunks whose size can be less that + * client buffer size, for effectivity client buffer is allways filled with data. + * Recursive algorith is used for that. + * + * @param aBuffer OUT: client data buffer + * @return TInt, KErrNone or KErrOverflow if all MMS message data has been read. + */ + TInt ReadDataRecursively(TDes8& aBuffer); + + /** + * This function updates MMS message status + * + * @param aId IN: Identifies MMS message in message store + * @param aUnread IN: New status (unread/read) + */ + void UpdateMmsStatusL(TMsvId aId, TBool aUnread); + + /** + * Registers user folder messages to snapshot, used by RegisterSnapshotL. + * + * @param aSnapshot IN: a snapshot item array. + * @return TInt, Not used. + */ + TInt RegisterUserFoldersL(CSnapshotArray* aSnapshot) const; + + /** + * Cleans all user folders from SMS messages + * + * @return KErrNone in case of success + */ + TInt CleanUserFoldersL(); + +private: // Data members + + /** + * @brief Data Store states: + * EMmsClosed: Store is closed. + * EMmsOpenAndWaiting: Store is ready to be used. + * EMmsItemOpen: Item is being read. + * EMmsItemCreating: Item is being created. + * EMmsItemUpdating: Item is being updated. + */ + enum TState + { + EMmsClosed = 0, + EMmsOpenAndWaiting, + EMmsItemOpen, + EMmsItemOpenFieldUpdate, + EMmsItemCreating, + EMmsItemUpdating, + EFolderOpen, + EFolderCreating, + EFolderUpdating + }; + + /** + * A flag indicating the existence of synchronization history. + */ + TBool iHasHistory; + + /** + * Flag indicating, whether database is opened. + */ + TBool iDataBaseOpened; + + /** + * The state of the active object. + */ + TState iCurrentState; + + /** + * Access to streams, used by ChangeFinder. + */ + MSmlSyncRelationship* iContext; + + /** + * Key that is used in sorting snapshot. + */ + const TKeyArrayFix iKey; + + /** + * Change finder, used to determine db modifications. + */ + CChangeFinder* iChangeFinder; + + /** + * Used to access MMS message store + */ + CMmsCodecClient* iCodecClient; + + /** + * Used to access message folders + */ + CMmsAdapterMsvApi* iMsvApi; + + /** + * Waiter object for asynchronous operations + */ + CMsvOperationActiveSchedulerWait* iMsvWait; + + /** + * Message server session handle + */ + CMsvSession* iMsvSession; + + /** + * The location for temporary data + */ + CBufFlat* iDataBuffer; + + /** + * Counter of partial data reading + */ + TInt iReadCounter; + + /** + * To store information whether current MMS message is unread + */ + TBool iUnread; + + /** + * Data chunk used in partial data reading from MMS engine + */ + TPtrC8 iReadDataChunk; + + /** + * Current read position at the data chunk from MMS engine + */ + TInt iReadPosition; + + /** + * Indicates wheter this is the last data chunk from MMS engine + */ + TBool iLastDataChunk; + + /** + * Indicates whether all data related to current message has been read + */ + TBool iReadAllData; + + /** + * Counter of partial data writing + */ + TInt iWriteCounter; + + /** + * Indicates wheter this was only status update + */ + TInt iWrittenDataLength; + + /** + * Stores the currently active message id. + */ + TMsvId iCurrentId; + + /** + * Pointer to the variable, receiving the created Uid. + */ + TSmlDbItemUid* iCreatedUid; + + /** + * Stores the parent id of currently active message. + */ + TMsvId iParentId; + + /** + * Used to get asynchronous return values. + */ + TRequestStatus* iCallerStatus; + + /** + * Used to store new items. + */ + CNSmlDataItemUidSet* iNewItems; + + /** + * Used to store deleted items. + */ + CNSmlDataItemUidSet* iDeletedItems; + + /** + * Used to store updated items. + */ + CNSmlDataItemUidSet* iUpdatedItems; + + /** + * Used to store moved items. + */ + CNSmlDataItemUidSet* iMovedItems; + + /** + * Used to store soft-deleted items (not supported). + */ + CNSmlDataItemUidSet* iSoftDeletedItems; + + /** + * Used to parse OMA DS Folder Objects + */ + COMADSFolderObject* iFolderObjectParser; + + /** + * Reserved pointer for future extension. + */ + TAny* iReserved; + }; + +#endif // __MMSDATASTORE_H__ +