omads/omadsextensions/adapters/mediads/inc/mediamanager.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-2010 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 _CMEDIAMANAGER_H
hgs
parents:
diff changeset
    21
#define _CMEDIAMANAGER_H
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include <e32base.h>
hgs
parents:
diff changeset
    24
#include <mpxmediageneraldefs.h>
hgs
parents:
diff changeset
    25
#include <mpxcollectionutility.h>
hgs
parents:
diff changeset
    26
#include <mpxcollectionmediator.h>
hgs
parents:
diff changeset
    27
#include <mpxcollectionobserver.h>
hgs
parents:
diff changeset
    28
#include <mpxharvesterutilityobserver.h>
hgs
parents:
diff changeset
    29
#include <mpxharvesterutility.h>
hgs
parents:
diff changeset
    30
#include <mpxcollectionhelperobserver.h>
hgs
parents:
diff changeset
    31
 
hgs
parents:
diff changeset
    32
#include "changefinder.h"
hgs
parents:
diff changeset
    33
#include "songitem.h"
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
class CMPXMedia;
hgs
parents:
diff changeset
    36
class MMPXCollectionHelper;
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
class MMediaManagerObserver : public MMPXCollectionObserver
hgs
parents:
diff changeset
    39
    {
hgs
parents:
diff changeset
    40
public:
hgs
parents:
diff changeset
    41
    virtual void RegisterAllPlayListsCompleted( TInt aError ) = 0;
hgs
parents:
diff changeset
    42
    virtual void RegisterAllSongsCompleted( TInt aError ) = 0;
hgs
parents:
diff changeset
    43
    };
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/**
hgs
parents:
diff changeset
    46
 * @brief This class manages playlist's on media library. Also songs metadata can be queried.
hgs
parents:
diff changeset
    47
 * 
hgs
parents:
diff changeset
    48
 */
hgs
parents:
diff changeset
    49
class CMediaManager : public CActive, private MMPXCollectionHelperObserver
hgs
parents:
diff changeset
    50
    {
hgs
parents:
diff changeset
    51
public:
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
    static CMediaManager* NewL( RFs& aFs, MMediaManagerObserver* aObserver, TKeyArrayFix aKey, CMD5& aHasher );
hgs
parents:
diff changeset
    54
    
hgs
parents:
diff changeset
    55
    ~CMediaManager();
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
    /**
hgs
parents:
diff changeset
    58
     * Starts scanning music library.
hgs
parents:
diff changeset
    59
     * Calls MMPXCollectionObserver::HandleCollectionMessage when completed.
hgs
parents:
diff changeset
    60
     */
hgs
parents:
diff changeset
    61
    void ScanL();
hgs
parents:
diff changeset
    62
    
hgs
parents:
diff changeset
    63
    /**
hgs
parents:
diff changeset
    64
     * Cancel scan
hgs
parents:
diff changeset
    65
     */
hgs
parents:
diff changeset
    66
    void CancelScanL();
hgs
parents:
diff changeset
    67
    
hgs
parents:
diff changeset
    68
    /**
hgs
parents:
diff changeset
    69
     * Set current snapshot.
hgs
parents:
diff changeset
    70
     * @param aSnapshot
hgs
parents:
diff changeset
    71
     */
hgs
parents:
diff changeset
    72
    void SetSnapshot( CSnapshotArray* aSnapshot ){iSnapshotArray=aSnapshot;};
hgs
parents:
diff changeset
    73
    
hgs
parents:
diff changeset
    74
    /**
hgs
parents:
diff changeset
    75
     * Starts registering all playlists.
hgs
parents:
diff changeset
    76
     * Snapshot must be set before calling this.
hgs
parents:
diff changeset
    77
     * Calls MMediaManagerObserver::RegisterAllPlayListsCompleted when ready
hgs
parents:
diff changeset
    78
     * @return KErrNone if operation succesfully started.
hgs
parents:
diff changeset
    79
     */
hgs
parents:
diff changeset
    80
    TInt RegisterAllPlayLists();
hgs
parents:
diff changeset
    81
    
hgs
parents:
diff changeset
    82
    /**
hgs
parents:
diff changeset
    83
     * Starts registering all songs.
hgs
parents:
diff changeset
    84
     * Snapshot must be set before calling this.
hgs
parents:
diff changeset
    85
     * Calls MMediaManagerObserver::RegisterAllSongsCompleted when ready
hgs
parents:
diff changeset
    86
     * @return KErrNone if operation succesfully started.
hgs
parents:
diff changeset
    87
     */
hgs
parents:
diff changeset
    88
    TInt RegisterAllSongs();
hgs
parents:
diff changeset
    89
    
hgs
parents:
diff changeset
    90
    /**
hgs
parents:
diff changeset
    91
     * Gets CPlaylistItem
hgs
parents:
diff changeset
    92
     * @param aPlaylistId playlist id to get.
hgs
parents:
diff changeset
    93
     * @param aPlaylist returned playlist.
hgs
parents:
diff changeset
    94
     */
hgs
parents:
diff changeset
    95
    void GetPlayListL( TInt aPlaylistId, CPlaylistItem& aPlaylist );
hgs
parents:
diff changeset
    96
    
hgs
parents:
diff changeset
    97
    /**
hgs
parents:
diff changeset
    98
     * Gets CSongItem
hgs
parents:
diff changeset
    99
     * @param aSongId song id to get.
hgs
parents:
diff changeset
   100
     * @param aSongItem returned song.
hgs
parents:
diff changeset
   101
     */
hgs
parents:
diff changeset
   102
    void GetSongL( TInt aSongId, CSongItem& aSongItem );
hgs
parents:
diff changeset
   103
    
hgs
parents:
diff changeset
   104
    /**
hgs
parents:
diff changeset
   105
     * Creates new playlist to music library
hgs
parents:
diff changeset
   106
     * @param aNewUid returns new playlist id, if succesfully added.
hgs
parents:
diff changeset
   107
     * @param aPlaylist playlist to be added. Uri is updated to aPlaylist.
hgs
parents:
diff changeset
   108
     */
hgs
parents:
diff changeset
   109
    void CreateNewPlaylistL( TInt& aNewUid, CPlaylistItem& aPlaylist );
hgs
parents:
diff changeset
   110
    
hgs
parents:
diff changeset
   111
    /**
hgs
parents:
diff changeset
   112
     * Replaces existing playlist in music library
hgs
parents:
diff changeset
   113
     * @param aPlaylistId playlist id to be replaced. Uri is read to aPlaylist.
hgs
parents:
diff changeset
   114
     * @param aPlaylist new content.
hgs
parents:
diff changeset
   115
     */
hgs
parents:
diff changeset
   116
    void ReplacePlaylistL( TInt aPlaylistId, CPlaylistItem& aPlaylist );
hgs
parents:
diff changeset
   117
    
hgs
parents:
diff changeset
   118
    /**
hgs
parents:
diff changeset
   119
     * Deletes playlist from music library
hgs
parents:
diff changeset
   120
     * @param aPlaylistId playlist id to be deleted.
hgs
parents:
diff changeset
   121
     */
hgs
parents:
diff changeset
   122
    void DeletePlaylistL( TInt aPlaylistId );
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
private: // From MMPXCollectionHelperObserver
hgs
parents:
diff changeset
   125
    void HandleAddFileCompleteL( TInt aErr );
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
private:
hgs
parents:
diff changeset
   128
    CMediaManager( RFs& aFs, MMediaManagerObserver* aObserver, TKeyArrayFix aKey, CMD5& aHasher );
hgs
parents:
diff changeset
   129
    
hgs
parents:
diff changeset
   130
    void ConstructL();
hgs
parents:
diff changeset
   131
    
hgs
parents:
diff changeset
   132
    void RegisterPlaylistL( const CMPXMedia& aMedia );
hgs
parents:
diff changeset
   133
    
hgs
parents:
diff changeset
   134
    void RegisterSongL( const CMPXMedia& aMedia );
hgs
parents:
diff changeset
   135
    
hgs
parents:
diff changeset
   136
    CMPXMedia* FetchPlaylistContentL( TInt aId );
hgs
parents:
diff changeset
   137
    
hgs
parents:
diff changeset
   138
    CMPXMedia* FindPlaylistL( TInt aUid );
hgs
parents:
diff changeset
   139
    
hgs
parents:
diff changeset
   140
    void AddPlaylistL( CMPXMedia* aMedia );
hgs
parents:
diff changeset
   141
    
hgs
parents:
diff changeset
   142
    void ReadSongAttributesL( const CMPXMedia& aMedia, CSongItem& aSongItem, TBool aReadFileDetails );
hgs
parents:
diff changeset
   143
    
hgs
parents:
diff changeset
   144
    CMPXMedia* CreatePlaylistMediaL( const CPlaylistItem& aPlaylist );
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
    CMPXMediaArray* CreateMediaArrayLC( const CPlaylistItem& aPlaylist );
hgs
parents:
diff changeset
   147
    
hgs
parents:
diff changeset
   148
    void ReadPlaylistCountL();
hgs
parents:
diff changeset
   149
    void ReadPlaylistItemsL();
hgs
parents:
diff changeset
   150
    
hgs
parents:
diff changeset
   151
    void ReadSongCountL();
hgs
parents:
diff changeset
   152
    void ReadSongItemsL();
hgs
parents:
diff changeset
   153
private: // from CActive
hgs
parents:
diff changeset
   154
    
hgs
parents:
diff changeset
   155
    void DoCancel();
hgs
parents:
diff changeset
   156
    void RunL();
hgs
parents:
diff changeset
   157
    TInt RunError( TInt aError );
hgs
parents:
diff changeset
   158
    
hgs
parents:
diff changeset
   159
private:
hgs
parents:
diff changeset
   160
    
hgs
parents:
diff changeset
   161
    enum TState
hgs
parents:
diff changeset
   162
        {
hgs
parents:
diff changeset
   163
        EIdle = 0,
hgs
parents:
diff changeset
   164
        EReadingPlaylistCount,
hgs
parents:
diff changeset
   165
        EEnumeratingPlaylists,
hgs
parents:
diff changeset
   166
        EReadingSongCount,
hgs
parents:
diff changeset
   167
        EEnumeratingSongs
hgs
parents:
diff changeset
   168
        };
hgs
parents:
diff changeset
   169
    TState iCurrentState;
hgs
parents:
diff changeset
   170
    
hgs
parents:
diff changeset
   171
    CMPXMedia*              iFoundedMedia;
hgs
parents:
diff changeset
   172
    TInt                    iReadedItems;
hgs
parents:
diff changeset
   173
    TInt                    iItemsFound;
hgs
parents:
diff changeset
   174
    CSnapshotArray*         iSnapshotArray; // not owned
hgs
parents:
diff changeset
   175
    
hgs
parents:
diff changeset
   176
    MMediaManagerObserver*  iObserver;
hgs
parents:
diff changeset
   177
    const TKeyArrayFix      iKey;
hgs
parents:
diff changeset
   178
    MMPXCollectionHelper*   iCollectionHelper;
hgs
parents:
diff changeset
   179
    
hgs
parents:
diff changeset
   180
    CMD5&                   iHasher;
hgs
parents:
diff changeset
   181
    
hgs
parents:
diff changeset
   182
    MMPXHarvesterUtility*   iHarvester;
hgs
parents:
diff changeset
   183
    CMPXCollectionMediator* iMediator;
hgs
parents:
diff changeset
   184
    MMPXCollectionUtility*  iCollection;
hgs
parents:
diff changeset
   185
    RFs&                    iFs;
hgs
parents:
diff changeset
   186
    
hgs
parents:
diff changeset
   187
    bool                    iWaitOngoing;
hgs
parents:
diff changeset
   188
    CActiveSchedulerWait    iWait;
hgs
parents:
diff changeset
   189
    };
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
#endif // _CMEDIAMANAGER_H