diff -r 000000000000 -r a2952bb97e68 mmappcomponents/audiofetcher/inc/audiofetcherfilehandler.h --- /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 +#include +#include +#include +#include +#include +#include +#include + + +// 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& aObjectIdArray); + + private: // from MMdEObjectPresentObserver + void HandleObjectPresentNotification( CMdESession& aSession, + TBool aPresent, const RArray& 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 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