omads/omadsextensions/adapters/mediads/inc/mediadsstore.h
changeset 40 b63e67867dcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/adapters/mediads/inc/mediadsstore.h	Tue Jul 13 03:39:25 2010 +0530
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2009 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 __MEDIADATASTORE_H__
+#define __MEDIADATASTORE_H__
+
+// INCLUDES
+#include <smldataprovider.h>
+#include <mpxcollectionobserver.h>
+
+#include "mediadsproviderdefs.h" 
+#include "changefinder.h"
+#include "mediamanager.h"
+#include "cmdemanager.h"
+
+// FORWARD DECLARATIONS
+class CNSmlDataItemUidSet;
+class MMPXHarvesterUtility;
+class MMPXCollectionUtility;  
+class CMPXCollectionMediator;
+
+
+/**
+* @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 CMediaDsDataStore : public CSmlDataStore,
+                          public MMediaManagerObserver,
+                          public MMdEManagerObserver
+    {
+public:  
+    
+    /**
+    * Constructor
+	*
+	* @return CMediaDsDataStore* instance.
+    */
+    static CMediaDsDataStore* NewLC( RFs& aFs );
+    
+	/**
+    * Destructor
+    */
+    virtual ~CMediaDsDataStore();
+
+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<TInt>& 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);
+
+protected: // from MMPXCollectionObserver
+    void HandleCollectionMessage(CMPXMessage* aMsg, TInt /*aErr*/) ;
+    void HandleOpenL(const CMPXMedia& aEntries,
+          TInt aIndex,TBool aComplete,TInt aError);
+    void HandleOpenL(const CMPXCollectionPlaylist& aPlaylist,TInt aError);
+    void HandleCommandComplete(CMPXCommand* /*aCommandResult*/, 
+                                           TInt /*aError*/);
+    void HandleCollectionMediaL(const CMPXMedia& aMedia, 
+                                            TInt aError);
+    // from MMediaManagerObserver
+    void RegisterAllPlayListsCompleted( TInt aError );
+    void RegisterAllSongsCompleted( TInt aError );
+    
+protected: // from MMdEManagerObserver
+    void AlbumsReaded( TInt aError );
+    void AlbumReplaced( TInt aError );
+
+private: 
+
+	/**
+    * C++ Constructor.
+    */
+    CMediaDsDataStore( RFs& aFs );
+    
+	/**
+    * 2nd-phase Constructor.
+    *
+    * @param aMsvSession	IN: a session handle to message store
+    */    
+    void ConstructL();
+	
+	/**
+    * Registers snapshot to ChangeFinder.
+    */
+	void RegisterSnapshotL();
+
+	void RegisterFoldersL( CSnapshotArray& aItemArray );
+	
+	void FinalizeOpenStore();
+	
+	inline TInt MapSyncIdToAlbumId( TSmlDbItemUid aSyncId );
+	inline TSmlDbItemUid MapAlbumIdToSyncId( TInt aAlbumId );
+	
+private: // Data members
+
+	
+    enum TState
+        {
+        EClosed = 0,
+        EOpening,
+        EOpenAndWaiting,
+        EReplace,
+        ECreatePlaylist
+        };
+    
+    /**
+    * The state of the plugin.
+    */
+    TState iCurrentState;   
+    
+    /**
+	* A flag indicating the existence of synchronization history.
+	*/
+    TBool iHasHistory;
+    
+    /**
+	* Key that is used in sorting snapshot.
+	*/
+    const TKeyArrayFix iKey;
+
+    /**
+	* Change finder, used to determine db modifications.
+	*/
+    CChangeFinder* iChangeFinder;
+    
+    /**
+	* The location for temporary data
+	*/
+    CBufFlat* iDataBuffer;
+    
+    /**
+	* Current read position at the data chunk from MMS engine
+	*/      
+    TInt iReadPosition;
+    
+    /**
+	* Indicates wheter this was only status update
+	*/      
+    TInt iWrittenDataLength;
+
+    /**
+	* Stores the currently active message id.
+	*/
+    TSmlDbItemUid iCurrentId;
+    
+    /**
+	* Pointer to the variable, receiving the created Uid.
+	*/
+	TSmlDbItemUid* iCreatedUid;  
+
+    /**
+	* Stores the parent id of currently active message.
+	*/
+	TSmlDbItemUid 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 manage playlists and songs.
+     */
+    CMediaManager*  iMediaManager;
+    TBool           iMediaManagerReady;
+    
+    /**
+     * Used to manage photo albums.
+     */
+    CMdEManager*    iMdEManager;
+    TBool           iMdEManagerReady;
+    
+    TInt            iError;
+    
+    CMD5* iHasher;
+    
+    RFs&    iFs;
+    
+    CSnapshotArray* iSnapshot;
+    TSnapshotItem   iItemInReplacement;
+    };
+
+#endif // __MEDIADATASTORE_H__