diff -r 2bb96f4ecad8 -r 8e7494275d3a omads/omadsextensions/adapters/mediads/inc/cmdemanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsextensions/adapters/mediads/inc/cmdemanager.h Tue Aug 31 15:05:37 2010 +0300 @@ -0,0 +1,159 @@ +/* +* 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: CMdEManager declaration +* +*/ + + +#ifndef CMDEMANAGER_H +#define CMDEMANAGER_H + +#include +#include +#include + +#include "playlistitem.h" + +class MMdEManagerObserver + { +public: + virtual void AlbumsReaded( TInt aError ) = 0; + virtual void AlbumReplaced( TInt aError ) = 0; + }; + +class CMdEManager : public CBase, + MMdESessionObserver, + MMdEQueryObserver + { +public: + // Cancel and destroy + ~CMdEManager(); + + // Two-phased constructor. + static CMdEManager* NewL( MMdEManagerObserver& aObserver ); + +public: + + /** + * Start enumerating albums. Calls MMdEManagerObserver::AlbumsReaded when ready. + * This needs to be called before any other operations. + */ + void GetAlbumsL(); + + + RPointerArray& AlbumsArray(){ return iAlbums; }; + const CPlaylistItem& AlbumL( TInt aAlbumId ) const; + + void CreateAlbumL( CPlaylistItem& aAlbum ); + void ReplaceAlbumL( TInt aAlbumId, CPlaylistItem& aAlbum ); + void DeleteAlbumL( TInt aAlbumId ); + + /** + * Cancels any outstanding request if any. + */ + void Cancel(); + +private: + void StartProcessingAlbumsL(); + void ProcessNextAlbumL(); + void FindItemsOnAlbumL( TItemId aAlbumObjectId ); + +private: // from MMdESessionObserver + /** + * Called to notify the observer that opening the session has been + * completed and, if the opening succeeded, the session is ready for use. + * + * @param aSession session + * @param aError KErrNone, if opening the session succeeded; + * or one of the system-wide error codes, if opening the + * session failed + */ + void HandleSessionOpened(CMdESession& aSession, TInt aError); + + /** + * Called to notify the observer about errors, which are not a direct + * consequence of the operations initiated by the client but caused by + * some external source (e.g., other clients). The error cannot be + * recovered and all on-going operations initiated by the client have been + * aborted. Any attempts to continue using the session will cause a panic. + * The client should close the session immediately and try to open a new + * session, if it needs to continue using the metadata engine. + * + * @param aSession session + * @param aError one of the system-wide error codes + */ + void HandleSessionError(CMdESession& aSession, TInt aError); + +private: // from MMdEQueryObserver + /** + * Called to notify the observer that new results have been received + * in the query. + * + * @param aQuery Query instance that received new results. + * @param aFirstNewItemIndex Index of the first new item that was added + * to the result item array. + * @param aNewItemCount Number of items added to the result item + * array. + */ + void HandleQueryNewResults(CMdEQuery& aQuery, + TInt aFirstNewItemIndex, + TInt aNewItemCount); + + + + /** + * Called to notify the observer that the query has been completed, + * or that an error has occured. + * + * @param aQuery Query instance. + * @param aError KErrNone, if the query was completed + * successfully. Otherwise one of the system-wide error + * codes. + */ + void HandleQueryCompleted(CMdEQuery& aQuery, TInt aError); +private: + + CMdEManager( MMdEManagerObserver& aObserver ); + + void ConstructL(); + + void HandleAlbumQueryCompletedL( CMdEObjectQuery& aQuery ); + void HandleObjectQueryCompletedL( CMdEObjectQuery& aQuery ); + void HandleRelationQueryCompletedL( CMdERelationQuery& aQuery ); + +private: + enum TCMdEManagerState + { + EUninitialized, // Uninitialized / initialization is ongoing + EWaitingToEnumerateAlbums, // Initializing and starting collecting albums info + EEnumeratingAlbums, // Album enumeration is ongoing + EReplacingAlbum, // Replacing album (searching removed relation id:s) + EIdle // Ready for next operation + }; + +private: + MMdEManagerObserver& iObserver; + TCMdEManagerState iState; + + CMdESession* iMde; + CMdEObjectQuery* iAlbumQuery; + CMdEObjectQuery* iObjectQuery; + CMdERelationQuery* iContainmentQuery; + + RPointerArray iAlbumsInProgress; + RPointerArray iAlbums; + + }; + +#endif // CMDEMANAGER_H