omads/omadsextensions/adapters/mediads/inc/cmdemanager.h
branchRCL_3
changeset 24 8e7494275d3a
--- /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 <e32base.h>
+#include <mdesession.h>
+#include <mdequery.h>
+
+#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<CPlaylistItem>& 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   <code>KErrNone</code>, 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  <code>KErrNone</code>, 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<CPlaylistItem> iAlbumsInProgress;
+    RPointerArray<CPlaylistItem> iAlbums;
+    
+    };
+
+#endif // CMDEMANAGER_H