omads/omadsextensions/adapters/mediads/inc/mediamanager.h
changeset 40 b63e67867dcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/adapters/mediads/inc/mediamanager.h	Tue Jul 13 03:39:25 2010 +0530
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2009-2010 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 _CMEDIAMANAGER_H
+#define _CMEDIAMANAGER_H
+
+#include <e32base.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxcollectionutility.h>
+#include <mpxcollectionmediator.h>
+#include <mpxcollectionobserver.h>
+#include <mpxharvesterutilityobserver.h>
+#include <mpxharvesterutility.h>
+#include <mpxcollectionhelperobserver.h>
+ 
+#include "changefinder.h"
+#include "songitem.h"
+
+class CMPXMedia;
+class MMPXCollectionHelper;
+
+class MMediaManagerObserver : public MMPXCollectionObserver
+    {
+public:
+    virtual void RegisterAllPlayListsCompleted( TInt aError ) = 0;
+    virtual void RegisterAllSongsCompleted( TInt aError ) = 0;
+    };
+
+/**
+ * @brief This class manages playlist's on media library. Also songs metadata can be queried.
+ * 
+ */
+class CMediaManager : public CActive, private MMPXCollectionHelperObserver
+    {
+public:
+
+    static CMediaManager* NewL( RFs& aFs, MMediaManagerObserver* aObserver, TKeyArrayFix aKey, CMD5& aHasher );
+    
+    ~CMediaManager();
+    
+    /**
+     * Starts scanning music library.
+     * Calls MMPXCollectionObserver::HandleCollectionMessage when completed.
+     */
+    void ScanL();
+    
+    /**
+     * Cancel scan
+     */
+    void CancelScanL();
+    
+    /**
+     * Set current snapshot.
+     * @param aSnapshot
+     */
+    void SetSnapshot( CSnapshotArray* aSnapshot ){iSnapshotArray=aSnapshot;};
+    
+    /**
+     * Starts registering all playlists.
+     * Snapshot must be set before calling this.
+     * Calls MMediaManagerObserver::RegisterAllPlayListsCompleted when ready
+     * @return KErrNone if operation succesfully started.
+     */
+    TInt RegisterAllPlayLists();
+    
+    /**
+     * Starts registering all songs.
+     * Snapshot must be set before calling this.
+     * Calls MMediaManagerObserver::RegisterAllSongsCompleted when ready
+     * @return KErrNone if operation succesfully started.
+     */
+    TInt RegisterAllSongs();
+    
+    /**
+     * Gets CPlaylistItem
+     * @param aPlaylistId playlist id to get.
+     * @param aPlaylist returned playlist.
+     */
+    void GetPlayListL( TInt aPlaylistId, CPlaylistItem& aPlaylist );
+    
+    /**
+     * Gets CSongItem
+     * @param aSongId song id to get.
+     * @param aSongItem returned song.
+     */
+    void GetSongL( TInt aSongId, CSongItem& aSongItem );
+    
+    /**
+     * Creates new playlist to music library
+     * @param aNewUid returns new playlist id, if succesfully added.
+     * @param aPlaylist playlist to be added. Uri is updated to aPlaylist.
+     */
+    void CreateNewPlaylistL( TInt& aNewUid, CPlaylistItem& aPlaylist );
+    
+    /**
+     * Replaces existing playlist in music library
+     * @param aPlaylistId playlist id to be replaced. Uri is read to aPlaylist.
+     * @param aPlaylist new content.
+     */
+    void ReplacePlaylistL( TInt aPlaylistId, CPlaylistItem& aPlaylist );
+    
+    /**
+     * Deletes playlist from music library
+     * @param aPlaylistId playlist id to be deleted.
+     */
+    void DeletePlaylistL( TInt aPlaylistId );
+    
+private: // From MMPXCollectionHelperObserver
+    void HandleAddFileCompleteL( TInt aErr );
+    
+private:
+    CMediaManager( RFs& aFs, MMediaManagerObserver* aObserver, TKeyArrayFix aKey, CMD5& aHasher );
+    
+    void ConstructL();
+    
+    void RegisterPlaylistL( const CMPXMedia& aMedia );
+    
+    void RegisterSongL( const CMPXMedia& aMedia );
+    
+    CMPXMedia* FetchPlaylistContentL( TInt aId );
+    
+    CMPXMedia* FindPlaylistL( TInt aUid );
+    
+    void AddPlaylistL( CMPXMedia* aMedia );
+    
+    void ReadSongAttributesL( const CMPXMedia& aMedia, CSongItem& aSongItem, TBool aReadFileDetails );
+    
+    CMPXMedia* CreatePlaylistMediaL( const CPlaylistItem& aPlaylist );
+    
+    CMPXMediaArray* CreateMediaArrayLC( const CPlaylistItem& aPlaylist );
+    
+    void ReadPlaylistCountL();
+    void ReadPlaylistItemsL();
+    
+    void ReadSongCountL();
+    void ReadSongItemsL();
+private: // from CActive
+    
+    void DoCancel();
+    void RunL();
+    TInt RunError( TInt aError );
+    
+private:
+    
+    enum TState
+        {
+        EIdle = 0,
+        EReadingPlaylistCount,
+        EEnumeratingPlaylists,
+        EReadingSongCount,
+        EEnumeratingSongs
+        };
+    TState iCurrentState;
+    
+    CMPXMedia*              iFoundedMedia;
+    TInt                    iReadedItems;
+    TInt                    iItemsFound;
+    CSnapshotArray*         iSnapshotArray; // not owned
+    
+    MMediaManagerObserver*  iObserver;
+    const TKeyArrayFix      iKey;
+    MMPXCollectionHelper*   iCollectionHelper;
+    
+    CMD5&                   iHasher;
+    
+    MMPXHarvesterUtility*   iHarvester;
+    CMPXCollectionMediator* iMediator;
+    MMPXCollectionUtility*  iCollection;
+    RFs&                    iFs;
+    
+    bool                    iWaitOngoing;
+    CActiveSchedulerWait    iWait;
+    };
+
+
+#endif // _CMEDIAMANAGER_H