diff -r 8bda91a87a00 -r 8ee96d21d9bf profilesservices/MediaFileList/Inc/mediafilehandler.h --- a/profilesservices/MediaFileList/Inc/mediafilehandler.h Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,580 +0,0 @@ -/* -* Copyright (c) 2007 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: Used to interact with the MDE. -* -*/ - - - -#ifndef MEDIAFILEHANDLER_H -#define MEDIAFILEHANDLER_H - - -// INCLUDES - -#include "mediafiledialogutils.h" - - -#include -#include -#include -#include -#include -#include -#include -#include - - -// FORWARD DECLARATIONS -class CSearchList; -class CRomFileList; -class CArtistQuery; - -// CONSTANTS - -_LIT( KMimeTypeAMR, "audio/amr" ); -_LIT( KMimeTypeWAV, "audio/wav" ); -_LIT( KMimeMp3, "mp3" ); -_LIT( KDriveZ, "z:\\" ); -_LIT( KSpace, " " ); - - -/** -* CMediaFileData -* -* Used for storing metadata information for one media file. -*/ -NONSHARABLE_CLASS (CMediaFileData) : public CBase - { - public: - static CMediaFileData* NewL(); - virtual ~CMediaFileData(); - - private: - CMediaFileData(); - void ConstructL(); - - public: - const TDesC& Attr( TInt aAttr ); - void GetAttr( TInt aAttr, TDes& aValue ); - void SetAttrL( TInt aAttr, const TDesC& aValue ); - - public: - TInt iMediaFileType; - - private: - HBufC* iFullName; - HBufC* iName; - HBufC* iArtist; - HBufC* iAlbum; - HBufC* iGenre; - HBufC* iComposer; - }; - - -/** -* MMediaFileHandlerObserver -* -* For observing CMediaFileHandler events. -*/ -NONSHARABLE_CLASS (MMediaFileHandlerObserver) - { - public: - enum TMediaFileHandlerEvent - { - EInitComplete, - EQueryComplete, - EQueryCanceled, - EUnknownQueryComplete, - EMediaFileChanged, - EScanRomComplete, - EError - }; - - enum TScanRomState - { - ENoneRomScan, - ERomScanInProgress, - ERomScanComplete, - ERomScanError - }; - - public: - virtual void HandleMFEventL( TInt aEvent, TInt aError ) = 0; - }; - - - -/** -* CMediaFileHandler -* -* Used for making media file queries. For example get all songs for -* one artist. Uses metadata engine. -*/ -NONSHARABLE_CLASS (CMediaFileHandler) : public CBase, - public MMdESessionObserver, - public MMdEQueryObserver, - public MMdEObjectObserver, - public MMdEObjectPresentObserver, - public MMFActiveCallerObserver - { - public: - enum TMediaType - { - EMediaTypeTone = 0, - EMediaTypeVideo, - EMediaTypeRecording, - EMediaTypeMusic - }; - - enum TStorageType - { - EPhoneMemory = 0, - ERomStorage, - 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, - ESearchAudio, - ESearchVideo, - ESearchMusic, - ESearchTones, - EQueryEmpty, - EQueryUnknown, - - EQueryArtist, - EQueryArtistAlbum, - EQueryArtistAll, - EQueryArtistUnknown, - EQueryArtistEmpty, - }; - - public: - static CMediaFileHandler* NewL(); - virtual ~CMediaFileHandler(); - - private: - CMediaFileHandler(); - void ConstructL(); - - public: - void SetAttrL( TInt aAttr, TInt aValue ); - void SetAttrL( TInt aAttr, const TDesC& aValue ); - void SetAttrL( TInt aAttr, TAny* aValue ); - - public: - void QueryMusicL( TInt aAttr ); - void QueryMusicL( TInt aAttr, const TDesC& aFindText ); - void QueryMusicUnknownL( TInt aAttr ); - void QueryMusicUnknownCountL( TInt aAttr ); - void QueryAttributeValuesL( TInt aAttr ); - void QueryArtistL( TInt aAttr, const TDesC& aArtist, - const TDesC& aAlbum, TBool aRefresh = EFalse ); - void QueryArtistEmptyL(); - void QueryEmptyL(); - void QueryRomEmptyL( TInt aQueryType ); - - void QueryVideosL( TInt aAttr ); - void QueryRecordingsL( TInt aAttr ); - void QueryTonesL( TInt aAttr ); - void QueryDefaultTonesL( TInt /*aAttr*/ ); - - void SearchL( const TDesC& aSearchText ); - void SearchAudioL( const TDesC& aSearchText ); - - void StartRomScaning( TInt aQueryType ); - - public: - TInt UnknownArtistCount(); - TInt UnknownArtistCountL(); - 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 ); - CMediaFileData* ReadMediaFileDataL( TInt aId ); - void CancelQuery(); - - /** - * Remove an item from list of search reuslt - * @param aIndex Search list's index. - * @return None. - */ - void Remove( TInt aIndex ); - - public: - TInt ItemIndex( const TDesC& aItemText, TInt aIndex ); - TInt ItemIndex( TInt aItemId, TInt aIndex ); - - private: - - void SearchVideoL( const TDesC& aSearchText ); - void SearchMusicL( const TDesC& aSearchText ); - void SearchTonesL( const TDesC& aSearchText ); - static TInt SearchTones( TAny *aObj ); - static TInt SearchVideo( TAny *aObj ); - - - public: - void SetObserver( MMediaFileHandlerObserver* aObserver ); - void SetQueryId( TInt aId ); - void EnableObserverCall( TBool aEnable ); - - - public: - CMediaFileData* RomMediaFileDataL( TInt aId ,TInt aMediaType ); - - 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 ExcludeRecordingsL( CMdELogicCondition& aCondition ); - void ExcludeRomFilesL( CMdELogicCondition& aCondition ); - void ExcludeMimeTypesL( CMdELogicCondition& aCondition, TInt aAttr ); - void IncludeMusicPropertiesL( CMdELogicCondition& aCondition ); - void ExcludeMusicPropertiesL( CMdELogicCondition& aCondition ); - void IncludeMusicSearchConditionL( CMdELogicCondition& aCondition, - const TDesC& aSearchText ); - void IncludeToneSearchConditionL( CMdELogicCondition& aCondition, - const TDesC& aSearchText ); - void IncludeVideoSearchConditionL( CMdELogicCondition& aCondition, - const TDesC& aSearchText ); - - - - 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 MMFActiveCallerObserver - void HandleActiveCallL( TInt aCallId ); - - private: - - // media file event observer - MMediaFileHandlerObserver* iObserver; - - // session to metadata engine - CMdESession* iSession; - - // metadata query - CMdEObjectQuery* iQuery; - - // used for optimizing artist queries - CArtistQuery* iArtistQuery; - - // search result list - ui shows items from this list - CSearchList* iSearchList; - - // metadata search text - TBuf iSearchText; - - // for generating active object calls - CMFActiveCaller* iQueryCaller; - // for generating active object calls - CMFActiveCaller* iObjectNotificationCaller; - - // for finding out file drive type - CDriveUtil* iDriveUtil; - - // mime types that are exluded from queries - CMimeTypeList* iExcludedMimeTypes; - - // for starting video query after short delay - CIdle* iIdle; - - // 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; - - TBool iVideoSearchDisabled; - - TInt iMediaFileCounter; - //for scan data from rom - CRomFileList* iRomFileList; - //Record the rom scan state. - TInt iRomScanState; - //Tone query in progress - TBool iQueryinProgress; - - }; - - - - -/** -* CSearchListItem -* -* Data for one media file item CSearchList. -*/ -NONSHARABLE_CLASS (CSearchListItem) : public CBase - { - public: - static CSearchListItem* NewLC(); - static CSearchListItem* NewL(); - 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; - }; - - -/** -* CRomFileList -* -* Used for reading media files from rom. -*/ -NONSHARABLE_CLASS (CRomFileList) : public CBase - { - public: - static CRomFileList* NewL(); - virtual ~CRomFileList(); - - private: - CRomFileList(); - void ConstructL(); - public: - void ReadDirectoryL( const TDesC& aDirectory, RArray& aList ); - void ReadDirectoryL( const TDesC& aDirectory, - RPointerArray& aList ); - - void ReadRomFilesL(); - void ReadRomVediosL(); - const TDesC& Item( TInt aIndex , TInt aType ); - TInt RomFileItem( CSearchListItem* aItem, TInt aIndex); - TInt RomVedioItem( CSearchListItem* aItem, TInt aIndex); - TInt Count( TInt aType ); - void Reset(); - - public: -// //Used to return the rom file attribute in rom; -// TInt RomFileAttribute(TInt aIndex, TInt aAttr); - //Used to return the title of rom item - TInt GetRomFileName(TInt aIndex, TInt aType, TDes& aValue); -private: - CSearchListItem* SearchListItemFromRomL(const TDesC& aFileName, - TInt aIndex); - //Used to get the title of rom item - void RomItemTitle(TInt aIndex, TDes& aTitle ); - -private: - TFileName iFileName; - RArray iList; - RArray iVedioList; - RPointerArray iRomToneList; - RPointerArray iRomVideoList; - - }; - -/** -* 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 SetRomFileList( CRomFileList* aRomFileList ); - void TakeResultL( CMdEObjectQuery* aQuery, TInt aMediaType ); - void TakeArtistResultL( CArtistQuery* aArtistQuery ); - void TakeDistinctResultL( CMdEObjectQuery* aQuery, TInt aMediaType ); - void SearchInToneL( CRomFileList* aQuery, const TDesC& aSearchText ); - void VideoSearchInRomL( CRomFileList* aQuery, const TDesC& aSearchText ); - - void AddAlbumItemL( const TDesC& aAlbum ); - void AddItemL( CMdEObject& aObject, TInt aMediaType ); - void AddRomItemL( CRomFileList* aRomList, 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(); - - /** - * Remove an item from the list of search results. - * @param aIndex List's index. - * @return None. - */ - void Remove( TInt aIndex ); - - public: - TInt ItemIndex( TInt aId ); - TInt ItemIndex( const TDesC& aText ); - TInt ItemIndex( const TDesC& aText, TInt aIndex ); - TInt ItemIndex( TInt aId, TInt aIndex ); - - private: - static TInt Compare( const CSearchListItem& aFirst, - const CSearchListItem& aSecond ); - void Panic( TInt aReason ); - const TDesC& TextL( CMdEObject& aObject, TInt aId ); - - private: - CMdESession* iSession; // does not own - - CRomFileList* iRomFileList; //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; - }; - - - - - -/** -* CArtistQuery -* -* CArtistQuery is for storing all metadata for one artist. -* Once CArtistQuery is initialized it can be used to get artist -* subqueries without making more metadata queries. -*/ -NONSHARABLE_CLASS (CArtistQuery) : public CBase - { - public: - static CArtistQuery* NewL(); - virtual ~CArtistQuery(); - - private: - CArtistQuery(); - void ConstructL(); - - public: - void ResetL(); - - void SetArtistL( const TDesC& aText ); - void SetAlbumL( const TDesC& aText ); - void SetQueryType( TInt aType ); - void SetQuery( CMdEObjectQuery* aQuery ); - - const TDesC& Artist(); - const TDesC& Album(); - TInt QueryType(); - CMdEObjectQuery* Query(); - TInt UnknownCount(); - - private: - CMdEObjectQuery* iQuery; - TInt iQueryType; - - HBufC* iArtist; - HBufC* iAlbum; - }; - - - -#endif // MEDIAFILEHANDLER_H - -// End of File