omads/omadsextensions/adapters/mediads/inc/mediadsstore.h
author hgs
Tue, 13 Jul 2010 03:39:25 +0530
changeset 40 b63e67867dcd
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Part of SyncML Data Synchronization Plug In Adapter
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#ifndef __MEDIADATASTORE_H__
hgs
parents:
diff changeset
    21
#define __MEDIADATASTORE_H__
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
// INCLUDES
hgs
parents:
diff changeset
    24
#include <smldataprovider.h>
hgs
parents:
diff changeset
    25
#include <mpxcollectionobserver.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include "mediadsproviderdefs.h" 
hgs
parents:
diff changeset
    28
#include "changefinder.h"
hgs
parents:
diff changeset
    29
#include "mediamanager.h"
hgs
parents:
diff changeset
    30
#include "cmdemanager.h"
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
// FORWARD DECLARATIONS
hgs
parents:
diff changeset
    33
class CNSmlDataItemUidSet;
hgs
parents:
diff changeset
    34
class MMPXHarvesterUtility;
hgs
parents:
diff changeset
    35
class MMPXCollectionUtility;  
hgs
parents:
diff changeset
    36
class CMPXCollectionMediator;
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
/**
hgs
parents:
diff changeset
    40
* @brief This class is derived from ECom Data Store plugin-interface (CSmlDataStore).
hgs
parents:
diff changeset
    41
* It performs the actual synchronization commands, which are received from
hgs
parents:
diff changeset
    42
* the DS engine.
hgs
parents:
diff changeset
    43
*/
hgs
parents:
diff changeset
    44
class CMediaDsDataStore : public CSmlDataStore,
hgs
parents:
diff changeset
    45
                          public MMediaManagerObserver,
hgs
parents:
diff changeset
    46
                          public MMdEManagerObserver
hgs
parents:
diff changeset
    47
    {
hgs
parents:
diff changeset
    48
public:  
hgs
parents:
diff changeset
    49
    
hgs
parents:
diff changeset
    50
    /**
hgs
parents:
diff changeset
    51
    * Constructor
hgs
parents:
diff changeset
    52
	*
hgs
parents:
diff changeset
    53
	* @return CMediaDsDataStore* instance.
hgs
parents:
diff changeset
    54
    */
hgs
parents:
diff changeset
    55
    static CMediaDsDataStore* NewLC( RFs& aFs );
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
	/**
hgs
parents:
diff changeset
    58
    * Destructor
hgs
parents:
diff changeset
    59
    */
hgs
parents:
diff changeset
    60
    virtual ~CMediaDsDataStore();
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
protected:
hgs
parents:
diff changeset
    63
   
hgs
parents:
diff changeset
    64
   	// Virtual functionality from CSmlDataStore, for comments see the CSmlDataStore header file
hgs
parents:
diff changeset
    65
	virtual void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    66
	virtual void DoCancelRequest();
hgs
parents:
diff changeset
    67
	virtual const TDesC& DoStoreName() const;
hgs
parents:
diff changeset
    68
	virtual void DoBeginTransactionL();
hgs
parents:
diff changeset
    69
	virtual void DoCommitTransactionL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    70
	virtual void DoRevertTransaction(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    71
	virtual void DoBeginBatchL();
hgs
parents:
diff changeset
    72
	virtual void DoCommitBatchL(RArray<TInt>& aResultArray, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    73
	virtual void DoCancelBatch();
hgs
parents:
diff changeset
    74
	virtual void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat);
hgs
parents:
diff changeset
    75
	virtual void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize);
hgs
parents:
diff changeset
    76
	virtual TInt DoMaxObjectSize() const;
hgs
parents:
diff changeset
    77
	virtual void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize,
hgs
parents:
diff changeset
    78
	    TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    79
	virtual void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent,
hgs
parents:
diff changeset
    80
	    const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    81
	virtual void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent,
hgs
parents:
diff changeset
    82
	    TBool aFieldChange, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    83
	virtual void DoReadItemL(TDes8& aBuffer);
hgs
parents:
diff changeset
    84
	virtual void DoWriteItemL(const TDesC8& aData);
hgs
parents:
diff changeset
    85
	virtual void DoCommitItemL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    86
	virtual void DoCloseItem();
hgs
parents:
diff changeset
    87
	virtual void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    88
	virtual void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    89
	virtual void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    90
	virtual void DoDeleteAllItemsL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    91
	virtual TBool DoHasSyncHistory() const;
hgs
parents:
diff changeset
    92
	virtual const MSmlDataItemUidSet& DoAddedItems() const;
hgs
parents:
diff changeset
    93
	virtual const MSmlDataItemUidSet& DoDeletedItems() const;
hgs
parents:
diff changeset
    94
	virtual const MSmlDataItemUidSet& DoSoftDeletedItems() const;
hgs
parents:
diff changeset
    95
	virtual const MSmlDataItemUidSet& DoModifiedItems() const;
hgs
parents:
diff changeset
    96
	virtual const MSmlDataItemUidSet& DoMovedItems() const;
hgs
parents:
diff changeset
    97
	virtual void DoResetChangeInfoL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    98
	virtual void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems);
hgs
parents:
diff changeset
    99
	virtual void DoCommitChangeInfoL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
protected: // from MMPXCollectionObserver
hgs
parents:
diff changeset
   102
    void HandleCollectionMessage(CMPXMessage* aMsg, TInt /*aErr*/) ;
hgs
parents:
diff changeset
   103
    void HandleOpenL(const CMPXMedia& aEntries,
hgs
parents:
diff changeset
   104
          TInt aIndex,TBool aComplete,TInt aError);
hgs
parents:
diff changeset
   105
    void HandleOpenL(const CMPXCollectionPlaylist& aPlaylist,TInt aError);
hgs
parents:
diff changeset
   106
    void HandleCommandComplete(CMPXCommand* /*aCommandResult*/, 
hgs
parents:
diff changeset
   107
                                           TInt /*aError*/);
hgs
parents:
diff changeset
   108
    void HandleCollectionMediaL(const CMPXMedia& aMedia, 
hgs
parents:
diff changeset
   109
                                            TInt aError);
hgs
parents:
diff changeset
   110
    // from MMediaManagerObserver
hgs
parents:
diff changeset
   111
    void RegisterAllPlayListsCompleted( TInt aError );
hgs
parents:
diff changeset
   112
    void RegisterAllSongsCompleted( TInt aError );
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
protected: // from MMdEManagerObserver
hgs
parents:
diff changeset
   115
    void AlbumsReaded( TInt aError );
hgs
parents:
diff changeset
   116
    void AlbumReplaced( TInt aError );
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
private: 
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
	/**
hgs
parents:
diff changeset
   121
    * C++ Constructor.
hgs
parents:
diff changeset
   122
    */
hgs
parents:
diff changeset
   123
    CMediaDsDataStore( RFs& aFs );
hgs
parents:
diff changeset
   124
    
hgs
parents:
diff changeset
   125
	/**
hgs
parents:
diff changeset
   126
    * 2nd-phase Constructor.
hgs
parents:
diff changeset
   127
    *
hgs
parents:
diff changeset
   128
    * @param aMsvSession	IN: a session handle to message store
hgs
parents:
diff changeset
   129
    */    
hgs
parents:
diff changeset
   130
    void ConstructL();
hgs
parents:
diff changeset
   131
	
hgs
parents:
diff changeset
   132
	/**
hgs
parents:
diff changeset
   133
    * Registers snapshot to ChangeFinder.
hgs
parents:
diff changeset
   134
    */
hgs
parents:
diff changeset
   135
	void RegisterSnapshotL();
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
	void RegisterFoldersL( CSnapshotArray& aItemArray );
hgs
parents:
diff changeset
   138
	
hgs
parents:
diff changeset
   139
	void FinalizeOpenStore();
hgs
parents:
diff changeset
   140
	
hgs
parents:
diff changeset
   141
	inline TInt MapSyncIdToAlbumId( TSmlDbItemUid aSyncId );
hgs
parents:
diff changeset
   142
	inline TSmlDbItemUid MapAlbumIdToSyncId( TInt aAlbumId );
hgs
parents:
diff changeset
   143
	
hgs
parents:
diff changeset
   144
private: // Data members
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
	
hgs
parents:
diff changeset
   147
    enum TState
hgs
parents:
diff changeset
   148
        {
hgs
parents:
diff changeset
   149
        EClosed = 0,
hgs
parents:
diff changeset
   150
        EOpening,
hgs
parents:
diff changeset
   151
        EOpenAndWaiting,
hgs
parents:
diff changeset
   152
        EReplace,
hgs
parents:
diff changeset
   153
        ECreatePlaylist
hgs
parents:
diff changeset
   154
        };
hgs
parents:
diff changeset
   155
    
hgs
parents:
diff changeset
   156
    /**
hgs
parents:
diff changeset
   157
    * The state of the plugin.
hgs
parents:
diff changeset
   158
    */
hgs
parents:
diff changeset
   159
    TState iCurrentState;   
hgs
parents:
diff changeset
   160
    
hgs
parents:
diff changeset
   161
    /**
hgs
parents:
diff changeset
   162
	* A flag indicating the existence of synchronization history.
hgs
parents:
diff changeset
   163
	*/
hgs
parents:
diff changeset
   164
    TBool iHasHistory;
hgs
parents:
diff changeset
   165
    
hgs
parents:
diff changeset
   166
    /**
hgs
parents:
diff changeset
   167
	* Key that is used in sorting snapshot.
hgs
parents:
diff changeset
   168
	*/
hgs
parents:
diff changeset
   169
    const TKeyArrayFix iKey;
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    /**
hgs
parents:
diff changeset
   172
	* Change finder, used to determine db modifications.
hgs
parents:
diff changeset
   173
	*/
hgs
parents:
diff changeset
   174
    CChangeFinder* iChangeFinder;
hgs
parents:
diff changeset
   175
    
hgs
parents:
diff changeset
   176
    /**
hgs
parents:
diff changeset
   177
	* The location for temporary data
hgs
parents:
diff changeset
   178
	*/
hgs
parents:
diff changeset
   179
    CBufFlat* iDataBuffer;
hgs
parents:
diff changeset
   180
    
hgs
parents:
diff changeset
   181
    /**
hgs
parents:
diff changeset
   182
	* Current read position at the data chunk from MMS engine
hgs
parents:
diff changeset
   183
	*/      
hgs
parents:
diff changeset
   184
    TInt iReadPosition;
hgs
parents:
diff changeset
   185
    
hgs
parents:
diff changeset
   186
    /**
hgs
parents:
diff changeset
   187
	* Indicates wheter this was only status update
hgs
parents:
diff changeset
   188
	*/      
hgs
parents:
diff changeset
   189
    TInt iWrittenDataLength;
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
    /**
hgs
parents:
diff changeset
   192
	* Stores the currently active message id.
hgs
parents:
diff changeset
   193
	*/
hgs
parents:
diff changeset
   194
    TSmlDbItemUid iCurrentId;
hgs
parents:
diff changeset
   195
    
hgs
parents:
diff changeset
   196
    /**
hgs
parents:
diff changeset
   197
	* Pointer to the variable, receiving the created Uid.
hgs
parents:
diff changeset
   198
	*/
hgs
parents:
diff changeset
   199
	TSmlDbItemUid* iCreatedUid;  
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
    /**
hgs
parents:
diff changeset
   202
	* Stores the parent id of currently active message.
hgs
parents:
diff changeset
   203
	*/
hgs
parents:
diff changeset
   204
	TSmlDbItemUid iParentId;
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
    /**
hgs
parents:
diff changeset
   207
	* Used to get asynchronous return values.
hgs
parents:
diff changeset
   208
	*/
hgs
parents:
diff changeset
   209
    TRequestStatus*  iCallerStatus;
hgs
parents:
diff changeset
   210
    
hgs
parents:
diff changeset
   211
    /**
hgs
parents:
diff changeset
   212
	* Used to store new items.
hgs
parents:
diff changeset
   213
	*/
hgs
parents:
diff changeset
   214
	CNSmlDataItemUidSet* iNewItems;
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
    /**
hgs
parents:
diff changeset
   217
	* Used to store deleted items.
hgs
parents:
diff changeset
   218
	*/
hgs
parents:
diff changeset
   219
    CNSmlDataItemUidSet* iDeletedItems;
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
    /**
hgs
parents:
diff changeset
   222
	* Used to store updated items.
hgs
parents:
diff changeset
   223
	*/
hgs
parents:
diff changeset
   224
    CNSmlDataItemUidSet* iUpdatedItems;
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    /**
hgs
parents:
diff changeset
   227
	* Used to store moved items.
hgs
parents:
diff changeset
   228
	*/
hgs
parents:
diff changeset
   229
    CNSmlDataItemUidSet* iMovedItems;
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
    /**
hgs
parents:
diff changeset
   232
	* Used to store soft-deleted items (not supported).
hgs
parents:
diff changeset
   233
	*/
hgs
parents:
diff changeset
   234
    CNSmlDataItemUidSet* iSoftDeletedItems;
hgs
parents:
diff changeset
   235
    
hgs
parents:
diff changeset
   236
    /**
hgs
parents:
diff changeset
   237
     * Used to manage playlists and songs.
hgs
parents:
diff changeset
   238
     */
hgs
parents:
diff changeset
   239
    CMediaManager*  iMediaManager;
hgs
parents:
diff changeset
   240
    TBool           iMediaManagerReady;
hgs
parents:
diff changeset
   241
    
hgs
parents:
diff changeset
   242
    /**
hgs
parents:
diff changeset
   243
     * Used to manage photo albums.
hgs
parents:
diff changeset
   244
     */
hgs
parents:
diff changeset
   245
    CMdEManager*    iMdEManager;
hgs
parents:
diff changeset
   246
    TBool           iMdEManagerReady;
hgs
parents:
diff changeset
   247
    
hgs
parents:
diff changeset
   248
    TInt            iError;
hgs
parents:
diff changeset
   249
    
hgs
parents:
diff changeset
   250
    CMD5* iHasher;
hgs
parents:
diff changeset
   251
    
hgs
parents:
diff changeset
   252
    RFs&    iFs;
hgs
parents:
diff changeset
   253
    
hgs
parents:
diff changeset
   254
    CSnapshotArray* iSnapshot;
hgs
parents:
diff changeset
   255
    TSnapshotItem   iItemInReplacement;
hgs
parents:
diff changeset
   256
    };
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
#endif // __MEDIADATASTORE_H__