omads/omadsextensions/adapters/mediads/inc/mediamanager.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:05:37 +0300
branchRCL_3
changeset 24 8e7494275d3a
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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