mmappcomponents/audiofetcher/inc/audiofetcherfilehandler.h
changeset 0 a2952bb97e68
child 63 91d5ad76f5c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/audiofetcher/inc/audiofetcherfilehandler.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,352 @@
+/*
+* 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: File handlder for Media Fetch plug-in
+*
+*/
+
+#ifndef AUDIOFETCHERFILEHANDLER_H
+#define AUDIOFETCHERFILEHANDLER_H
+
+
+// INCLUDES
+
+#include "audiofetcherdialogutils.h"
+
+
+#include <mdesession.h>
+#include <mdequery.h>
+#include <mdelogiccondition.h>
+#include <mdeconstants.h>
+#include <mdeobjectquery.h>
+#include <mdccommon.h>
+#include <mdeitem.h>
+#include <mdeobject.h>
+
+
+// FORWARD DECLARATIONS
+class CSearchList;
+
+// CONSTANTS
+
+_LIT( KMimeTypeAMR, "audio/amr" );
+_LIT( KMimeTypeWAV, "audio/wav" );
+_LIT( KMimeMp3, "mp3" );
+_LIT( KDriveZ, "z:\\" );
+_LIT( KSpace, " " );
+
+/**
+* MMediaFileHandlerObserver
+*
+* For observing CMediaFileHandler events.  
+*/
+NONSHARABLE_CLASS (MAudioFetcherFileHandlerObserver)
+    {
+    public:
+    enum TFileHandlerEvent
+        {
+        EInitComplete,
+        EQueryComplete,
+        EQueryCanceled,
+        EUnknownQueryComplete,
+        EMediaFileChanged,
+        EError
+        };
+    
+    public:
+        virtual void HandleFileEventL( TInt aEvent, TInt aError ) = 0;
+    };
+
+
+
+/**
+* CAudioFetcherFileHandler
+*
+* Used for making media file queries. For example get all songs for
+* one artist. Uses metadata engine.
+*/
+NONSHARABLE_CLASS (CAudioFetcherFileHandler) : public CBase, 
+                                        public MMdESessionObserver,
+                                        public MMdEQueryObserver,
+                                        public MMdEObjectObserver,
+                                        public MMdEObjectPresentObserver,
+                                        public MActiveCallerObserver
+    {
+    public:
+    enum TMediaType
+        {
+        EMediaTypeTone = 0,
+        EMediaTypeVideo,
+        EMediaTypeRecording,
+        EMediaTypeMusic,
+        EMediaTypeImage,
+        EMediaTypeAny,
+        };
+
+    enum TStorageType
+         {
+         EPhoneMemory = 0,
+         EMassStorage,
+         EMemoryCard
+         };
+
+    enum TQueryAttribute
+        {
+        EAttrMediaType = 20,  // integer
+        EAttrFileSize,        // integer
+        EAttrStorageType,     // integer
+        EAttrMediaFileId,     // integer
+        EAttrFileName,     // string
+        EAttrFullName,     // string
+        EAttrSongName,     // string
+        EAttrArtist,       // string
+        EAttrAlbum,        // string
+        EAttrGenre,        // string
+        EAttrComposer      // string
+        };
+
+    enum TQueryType
+        {
+        EQueryNone = 0,
+        EQueryAudio,
+        EQueryMusic,
+        EQueryVideo,
+        EQueryRecording,
+        EQueryTone,
+        EQueryRomFile,
+        EQueryImage,
+        ESearchAudio,
+        ESearchVideo,
+        ESearchMusic,
+        ESearchTones,
+        EQueryEmpty,
+        EQueryUnknown,
+        
+        EQueryArtist,
+        EQueryArtistAlbum,
+        EQueryArtistAll,
+        EQueryArtistUnknown,
+        EQueryArtistEmpty,
+        };
+
+    public:
+        static CAudioFetcherFileHandler* NewL();
+        virtual ~CAudioFetcherFileHandler();
+
+    private:
+        CAudioFetcherFileHandler();
+        void ConstructL();
+
+    public:
+        void QueryAudioL();
+        void QueryImageL();
+        void QueryVideoL();
+        TInt QueryType();
+        
+        
+    public:
+        TInt ResultCount();
+        TBool QueryReady();
+        TInt Attribute( TInt aIndex, TInt aAttr, TInt aQueryId );
+        void GetAttributeL( TInt aIndex, TInt aAttr, TDes& aValue, TInt aQueryId );
+        void GetAttribute( TInt aIndex, TInt aAttr, TDes& aValue, TInt aQueryId );
+        void CancelQuery();
+
+    public:
+        void SetObserver( MAudioFetcherFileHandlerObserver* aObserver );
+        void SetQueryId( TInt aId );
+        void EnableObserverCall( TBool aEnable );
+        
+    public:
+        TInt RomFileAttribute( TInt aIndex, TInt aAttr );
+        void GetRomFileAttribute( TInt aIndex, TInt aAttr, TDes& aValue );
+           
+    private:
+        CMdEPropertyDef& PropertyDefL( TInt aAttr );
+        void StrCopy( TDes& aTarget, const TDesC& aSource );
+        void CheckAttrL( TInt aAttr );
+        void CallObserverWithDelay();
+        void CallObserver( TInt aEvent, TInt aError );
+        void AddObjectObserverL();
+        
+    public:
+        static CMdEPropertyDef& PropertyDefL( CMdESession* aSession, TInt aAttr );
+        
+    private:
+
+        void ExcludeRomFilesL( CMdELogicCondition& aCondition );
+
+    private:
+        void LeaveIfSessionClosedL();
+        void Panic( TInt aReason );
+        TInt MediaType( TInt aQueryType );
+
+    private:  // from MMdESessionObserver
+        void HandleSessionOpened(CMdESession& aSession, TInt aError);
+        void HandleSessionError(CMdESession& aSession, TInt aError);
+        
+    
+    private:  // from MMdEQueryObserver (mdequery.h)
+        void HandleQueryNewResults( CMdEQuery& aQuery, TInt aFirstNewItemIndex,
+                                    TInt aNewItemCount );
+        void HandleQueryCompleted( CMdEQuery& aQuery, TInt aError );
+        void HandleQueryCompletedL( CMdEQuery& aQuery, TInt aError );
+        
+    private:  // from MMdEObjectObserver
+        void HandleObjectNotification( CMdESession& aSession, 
+                                       TObserverNotificationType aType,
+                                       const RArray<TItemId>& aObjectIdArray);
+                                       
+    private:  // from MMdEObjectPresentObserver
+        void HandleObjectPresentNotification( CMdESession& aSession, 
+                         TBool aPresent, const RArray<TItemId>& aObjectIdArray);
+        
+    private:   // from MActiveCallerObserver
+         void HandleActiveCallL( TInt aCallId );
+
+    private:
+    
+        // media file event observer
+        MAudioFetcherFileHandlerObserver* iObserver;
+       
+        // session to metadata engine
+        CMdESession* iSession;
+      
+        // metadata query
+        CMdEObjectQuery* iQuery;
+
+        // search result list - ui shows items from this list
+        CSearchList* iSearchList;
+
+        // metadata search text
+        TBuf<128> iSearchText;
+         
+        // for generating active object calls
+        CActiveCaller* iQueryCaller;
+        // for generating active object calls
+        CActiveCaller* iObjectNotificationCaller;
+        
+        // for finding out file drive type
+        CDriveUtil* iDriveUtil;
+
+        // used to prevent observer call when query is canceled fro ui
+        TBool iObserverCallEnabled;
+        
+        // query id from UI, not used in this class
+        TInt iQueryId;
+        
+        // max audio file file size
+        TInt iMaxFileSize;
+        
+        // is metadata session open
+        TBool iSessionOpen;
+
+        // query type 
+        TInt iQueryType;
+
+        // query error
+        TInt iQueryError;
+        
+        // query event
+        TInt iQueryEvent;
+
+    };
+
+
+
+
+/**
+* CSearchListItem
+*
+* Data for one media file item CSearchList.
+*/
+NONSHARABLE_CLASS (CSearchListItem) : public CBase 
+    {
+    public:
+        static CSearchListItem* NewLC();
+        virtual ~CSearchListItem();
+
+    private:
+        CSearchListItem();
+        void ConstructL();
+        
+    public:
+        void SetTitleL( const TDesC& aText, TBool aFullName );
+        const TDesC& Title() const;
+ 
+    public:
+        TInt iId;
+        TInt iMediaType;
+        TInt iStorageType;
+    private:
+        HBufC* iTitle;
+    };
+
+
+/**
+* CSearchList
+*
+* List for storing search result for one (most recent) metadata query.
+*/
+NONSHARABLE_CLASS (CSearchList) : public CBase 
+    {
+    public:
+        static CSearchList* NewL();
+        virtual ~CSearchList();
+
+    private:
+        CSearchList();
+        void ConstructL();
+        
+    public:
+        void SetSession( CMdESession* aSession );
+        void TakeResultL( CMdEObjectQuery* aQuery, TInt aMediaType );
+        //void TakeArtistResultL( CArtistQuery* aArtistQuery );
+        void TakeDistinctResultL( CMdEObjectQuery* aQuery, TInt aMediaType );
+  
+        void AddAlbumItemL( const TDesC& aAlbum );
+        void AddItemL( CMdEObject& aObject, TInt aMediaType );
+        void AddArtistItemL( CMdEObject& aObject, TInt aQueryType, const TDesC& aAlbum );
+
+        void Reset();
+        void Sort();
+        TInt Count();
+        void GetAttributeL( TInt aIndex, TInt aAttr, TDes& aValue );
+        TInt Attribute( TInt aIndex, TInt aAttr );
+        void SetSearchId( TInt aId );
+        TInt SearchId();
+        
+    private:
+        static TInt Compare( const CSearchListItem& aFirst, 
+                             const CSearchListItem& aSecond );
+        
+        static void StrCopy( TDes& aTarget, const TDesC& aSource );
+        void Panic( TInt aReason );
+        const TDesC& TextL( CMdEObject& aObject, TInt aId );
+       
+    private:
+        CMdESession* iSession;  // does not own
+        
+        // list of search results
+        RPointerArray<CSearchListItem> iList;
+        
+        // for finding out drive type (eg memory card)
+        CDriveUtil* iDriveUtil;
+        
+        // search id - not used in this class
+        TInt iSearchId;
+    };
+
+#endif  // AUDIOFETCHERFILEHANDLER_H
+
+// End of File