--- a/profilesservices/MediaFileList/Src/mediafilehandler.cpp Thu Aug 19 10:12:30 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3740 +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.
-*
-*/
-
-
-
-
-#include "mediafilehandler.h"
-#include "mediafilelistdebug.h"
-#include "mediafiledialogstate.h"
-#include "mediafilelist.h"
-
-#include <pathinfo.h>
-#include <bautils.h>
-
-
-
-
-/******************************************************************************
- * class CMediaFileData
- ******************************************************************************/
-
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileData::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileData* CMediaFileData::NewL()
- {
- CMediaFileData* self = new (ELeave) CMediaFileData();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileData::~CMediaFileData()
- {
- delete iFullName;
- delete iName;
- delete iArtist;
- delete iAlbum;
- delete iGenre;
- delete iComposer;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileData::CMediaFileData
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileData::CMediaFileData()
- {
- iMediaFileType = KErrNotFound;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileData::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileData::ConstructL()
- {
- iFullName = HBufC::NewL( 0 );
- iName = HBufC::NewL( 0 );
- iArtist = HBufC::NewL( 0 );
- iAlbum = HBufC::NewL( 0 );
- iGenre = HBufC::NewL( 0 );
- iComposer = HBufC::NewL( 0 );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileData::Attr
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC& CMediaFileData::Attr( TInt aAttr )
- {
- if ( aAttr == CMediaFileHandler::EAttrFullName )
- {
- return *iFullName;
- }
- if ( aAttr == CMediaFileHandler::EAttrSongName )
- {
- return *iName;
- }
- if ( aAttr == CMediaFileHandler::EAttrArtist )
- {
- return *iArtist;
- }
- if ( aAttr == CMediaFileHandler::EAttrAlbum )
- {
- return *iAlbum;
- }
- if ( aAttr == CMediaFileHandler::EAttrGenre )
- {
- return *iGenre;
- }
- if ( aAttr == CMediaFileHandler::EAttrComposer )
- {
- return *iComposer;
- }
-
- return KNullDesC;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileData::SetAttrL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileData::SetAttrL( TInt aAttr, const TDesC& aValue )
- {
- if ( aAttr == CMediaFileHandler::EAttrFullName )
- {
- delete iFullName;
- iFullName = NULL;
- iFullName = aValue.AllocL();
- }
- if ( aAttr == CMediaFileHandler::EAttrSongName )
- {
- delete iName;
- iName = NULL;
- iName = aValue.AllocL();
-
- }
- if ( aAttr == CMediaFileHandler::EAttrArtist )
- {
- delete iArtist;
- iArtist = NULL;
- iArtist = aValue.AllocL();
- }
- if ( aAttr == CMediaFileHandler::EAttrAlbum )
- {
- delete iAlbum;
- iAlbum = NULL;
- iAlbum = aValue.AllocL();
- }
- if ( aAttr == CMediaFileHandler::EAttrGenre )
- {
- delete iGenre;
- iGenre = NULL;
- iGenre = aValue.AllocL();
- }
- if ( aAttr == CMediaFileHandler::EAttrComposer )
- {
- delete iComposer;
- iComposer = NULL;
- iComposer = aValue.AllocL();
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileData::GetAttr
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileData::GetAttr( TInt aAttr, TDes& aValue )
- {
- if ( aAttr == CMediaFileHandler::EAttrFullName )
- {
- TMFDialogUtil::StrCopy( aValue, iFullName->Des() );
- }
- else if ( aAttr == CMediaFileHandler::EAttrSongName )
- {
- TMFDialogUtil::StrCopy( aValue, iName->Des() );
- }
- else if ( aAttr == CMediaFileHandler::EAttrArtist )
- {
- TMFDialogUtil::StrCopy( aValue, iArtist->Des() );
- }
- else if ( aAttr == CMediaFileHandler::EAttrAlbum )
- {
- TMFDialogUtil::StrCopy( aValue, iAlbum->Des() );
- }
- else if ( aAttr == CMediaFileHandler::EAttrGenre )
- {
- TMFDialogUtil::StrCopy( aValue, iGenre->Des() );
- }
- else if ( aAttr == CMediaFileHandler::EAttrComposer )
- {
- TMFDialogUtil::StrCopy( aValue, iComposer->Des() );
- }
- else
- {
- aValue = KNullDesC;
- }
- }
-
-
-/******************************************************************************
- * class CMediaFileHandler
- ******************************************************************************/
-
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileHandler* CMediaFileHandler::NewL()
- {
- CMediaFileHandler* self = new (ELeave) CMediaFileHandler();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileHandler::~CMediaFileHandler()
- {
- delete iSearchList;
-
- delete iQueryCaller;
- delete iObjectNotificationCaller;
-
- delete iDriveUtil;
- delete iExcludedMimeTypes;
- delete iIdle;
-
- delete iQuery;
- delete iArtistQuery;
- delete iSession;
-
- delete iRomFileList;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::CMediaFileHandler
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileHandler::CMediaFileHandler()
- {
- iSessionOpen = EFalse;
- iObserverCallEnabled = ETrue;
-
- iMaxFileSize = KErrNotFound;
- iQueryId = KErrNotFound;
- iQueryType = KErrNotFound;
- iQueryError = KErrNone;
- iQueryEvent = KErrNotFound;
- iVideoSearchDisabled = EFalse;
-
- iMediaFileCounter = 0;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::ConstructL()
- {
- iSession = CMdESession::NewL( *this );
- iSearchList = CSearchList::NewL();
-
- iQueryCaller = CMFActiveCaller::NewL( this );
- iObjectNotificationCaller = CMFActiveCaller::NewL( this );
-
- iDriveUtil = CDriveUtil::NewL();
- iArtistQuery = CArtistQuery::NewL();
- iExcludedMimeTypes = CMimeTypeList::NewL();
-
- iRomFileList = CRomFileList::NewL();
- iQueryinProgress = EFalse;
- iRomScanState = MMediaFileHandlerObserver::ENoneRomScan;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SetAttr
-//
-// -----------------------------------------------------------------------------
-void CMediaFileHandler::SetAttrL( TInt aAttr, TInt aValue )
- {
- switch ( aAttr )
- {
- case CMediaFileList::EAttrFileSize:
- {
- iMaxFileSize = aValue;
- break;
- }
- case CMediaFileList::EAttrExcludeFolder:
- {
- if ( aValue == CMediaFileList::EFolderVideos )
- {
- iVideoSearchDisabled = ETrue;
- }
- break;
- }
- default:
- {
- break;
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SetAttrL
-//
-// -----------------------------------------------------------------------------
-void CMediaFileHandler::SetAttrL( TInt aAttr, const TDesC& aValue )
- {
- if ( aAttr == CMediaFileList::EAttrExcludeMimeType )
- {
- iExcludedMimeTypes->AddMimeTypeL( aValue );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SetAttr
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SetAttrL( TInt /*aAttr*/, TAny* /*aValue*/ )
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleSessionOpened (from MMdESessionObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleSessionOpened( CMdESession& /*aSession*/, TInt aError )
- {
- if ( aError != KErrNone )
- {
- delete iSession;
- iSession = NULL;
- iSessionOpen = EFalse;
- }
- else
- {
- iSessionOpen = ETrue;
-
- TRAP_IGNORE( AddObjectObserverL() );
- }
-
- CallObserver( MMediaFileHandlerObserver::EInitComplete, aError );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::AddObjectObserverL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::AddObjectObserverL()
- {
- if ( iSessionOpen )
- {
- TUint32 notificationType = ENotifyAdd | ENotifyModify | ENotifyRemove;
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- iSession->AddObjectObserverL( *this, NULL, notificationType, &defNS );
-
- iSession->AddObjectPresentObserverL( *this );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleSessionError (from MMdESessionObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleSessionError( CMdESession& /*aSession*/, TInt aError )
- {
- if ( aError == KErrNone )
- {
- return;
- }
-
- delete iSession;
- iSession = NULL;
- iSessionOpen = EFalse;
-
- CallObserver( MMediaFileHandlerObserver::EError, aError );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleQueryNewResults (from MMdEQueryObserver)
-//
-// This observer function is called during query. Calling frequency is defined
-// in second parameter of CMdEQuery::FindL.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleQueryNewResults( CMdEQuery& /*aQuery*/,
- TInt /*aFirstNewItemIndex*/,
- TInt /*aNewItemCount*/ )
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleObjectNotification (MMdEObjectObserver)
-//
-// Called when metadata database changes.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleObjectNotification( CMdESession& /*aSession*/,
- TObserverNotificationType aType,
- const RArray<TItemId>& aObjectIdArray )
- {
- const TInt KObserverCallStep = 100;
-
- if ( aType == ENotifyAdd || aType == ENotifyModify || aType == ENotifyRemove )
- {
- if ( iObserver )
- {
- TInt count = aObjectIdArray.Count();
- FLOG( _L("CMediaFileHandler::HandleObjectNotification: count is %d"), count );
-
- iMediaFileCounter = iMediaFileCounter + count;
- if ( iMediaFileCounter >= KObserverCallStep )
- {
- iMediaFileCounter = 0;
- TRAP_IGNORE( iObserver->HandleMFEventL(
- MMediaFileHandlerObserver::EMediaFileChanged, KErrNone ) );
- }
- else
- {
- // delayed call to avoid many consecutive observer calls
- CallObserverWithDelay();
- }
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleObjectPresentNotification (MMdEObjectPresentObserver)
-//
-// Called when previously used memory card is inserted and hidden
-// metadata files are made present again.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleObjectPresentNotification( CMdESession& /*aSession*/,
- TBool /*aPresent*/, const RArray<TItemId>& aObjectIdArray )
- {
- if ( iObserver )
- {
- TInt count = aObjectIdArray.Count();
- FLOG( _L("CMediaFileHandler::HandleObjectPresentNotification: count is %d"), count );
-
- // delayed call to avoid many consecutive observer calls
- CallObserverWithDelay();
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleQueryCompleted (MMdEQueryObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleQueryCompleted( CMdEQuery& aQuery, TInt aError )
- {
-
- TInt err = KErrNone;
- TRAP( err, HandleQueryCompletedL( aQuery, aError ) );
-
- if ( err == KErrCancel )
- {
- CallObserver( MMediaFileHandlerObserver::EQueryCanceled, KErrNone );
- }
- else if ( err != KErrNone )
- {
- iSearchList->Reset();
- TRAP_IGNORE( iArtistQuery->ResetL() );
-
- CallObserver( MMediaFileHandlerObserver::EError, err );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleQueryCompletedL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleQueryCompletedL( CMdEQuery& /*aQuery*/, TInt aError )
- {
- TInt err = aError;
-
- if ( !iQuery && ( iRomScanState != MMediaFileHandlerObserver::ERomScanComplete
- && (iQueryType == EQueryTone || iQueryType == ESearchTones )) )
- {
- err = KErrGeneral;
- }
- if ( err == KErrCancel )
- {
- if ( iQueryType == ESearchAudio || iQueryType == ESearchMusic ||
- iQueryType == ESearchTones || iQueryType == ESearchVideo )
- {
- iSearchList->Reset();
- }
- User::Leave( err );
- }
- if ( err != KErrNone )
- {
- User::Leave( err );
- }
-
-
- iSearchList->SetSession( iSession );
-
- TQueryResultMode resultMode = EQueryResultModeItem;
- if ( iQuery )
- {
- resultMode = iQuery->ResultMode();
- }
-
-
- if ( resultMode == EQueryResultModeDistinctValues )
- {
- iSearchList->Reset();
- iSearchList->TakeDistinctResultL( iQuery, KErrNotFound );
- iSearchList->SetSearchId( iQueryId );
- iSearchList->Sort();
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
- }
- else if ( resultMode == EQueryResultModeCount )
- {
- // EQueryResultModeCount currently not used
- CallObserver( MMediaFileHandlerObserver::EUnknownQueryComplete, KErrNone );
- }
- else if ( resultMode == EQueryResultModeItem )
- {
- if ( iQueryType == ESearchAudio )
- {
- // ESearchAudio currently not used
- iSearchList->Reset();
- iSearchList->TakeResultL( iQuery, EMediaTypeMusic );
- iSearchList->Sort();
- iSearchList->SetSearchId( iQueryId );
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
-
- /*
- // ESearchAudio currently not used
- iSearchList->Reset();
- iSearchList->TakeResultL( iQuery, EMediaTypeMusic );
-
- delete iIdle;
- iIdle = NULL;
- iIdle = CIdle::NewL( CActive::EPriorityIdle );
- if ( iIdle )
- {
- iIdle->Start( TCallBack( SearchVideo, this ) );
- }
- */
- }
- else if ( iQueryType == ESearchMusic )
- {
- // search is done in 3 steps (music, tones and videos)
- iSearchList->Reset();
- iSearchList->TakeResultL( iQuery, EMediaTypeMusic );
-
- // call SearchTonesL after short delay (iQuery cannot
- // be deleted in this function)
- delete iIdle;
- iIdle = NULL;
- iIdle = CIdle::NewL( CActive::EPriorityIdle );
- if ( iIdle )
- {
- iIdle->Start( TCallBack( SearchTones, this ) );
- }
- else
- {
- User::Leave( KErrNoMemory );
- }
- }
- else if ( iQueryType == ESearchTones )
- {
- iSearchList->SearchInToneL( iRomFileList, iSearchText );
- iQueryinProgress = EFalse;
- // call SearchVideosL after short delay (iQuery cannot
- // be deleted in this function)
- delete iIdle;
- iIdle = NULL;
- iIdle = CIdle::NewL( CActive::EPriorityIdle );
- if ( iIdle )
- {
- iIdle->Start( TCallBack( SearchVideo, this ) );
- }
- else
- {
- User::Leave( KErrNoMemory );
- }
- }
- else if ( iQueryType == ESearchVideo )
- {
- iSearchList->TakeResultL( iQuery, EMediaTypeVideo );
- iSearchList->VideoSearchInRomL( iRomFileList, iSearchText );
- iSearchList->Sort();
- iSearchList->SetSearchId( iQueryId );
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
- }
-
- else if ( iQueryType == EQueryArtist )
- {
- // store CMdEObjectQuery to avoid multiple queries for one artist
- iArtistQuery->SetQuery( iQuery );
- iQuery = NULL;
-
- iSearchList->Reset();
- iSearchList->TakeArtistResultL( iArtistQuery );
- iSearchList->Sort();
- iSearchList->SetSearchId( iQueryId );
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
- }
- else if ( iQueryType == EQueryArtistEmpty )
- {
- // use previously stored CMdEObjectQuery for artist query
- iSearchList->Reset();
- iSearchList->TakeArtistResultL( iArtistQuery );
- iSearchList->Sort();
- iSearchList->SetSearchId( iQueryId );
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
- }
- else if ( iQueryType == EQueryEmpty )
- {
- iSearchList->Reset();
- iSearchList->SetSearchId( iQueryId );
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
- }
- else if ( iQueryType == EQueryUnknown )
- {
- iSearchList->Reset();
- iSearchList->TakeResultL( iQuery, EMediaTypeMusic );
- iSearchList->SetSearchId( iQueryId );
-
- CallObserver( MMediaFileHandlerObserver::EUnknownQueryComplete, KErrNone );
- }
- else
- {
- TInt mediaType = MediaType( iQueryType );
- iSearchList->Reset();
- if ( mediaType == EMediaTypeTone )
- {
- iSearchList->AddRomItemL( iRomFileList, mediaType );
- }
- else
- {
- iSearchList->TakeResultL( iQuery, mediaType );
- if ( mediaType == EMediaTypeVideo )
- {
- iSearchList->AddRomItemL( iRomFileList, mediaType );
- }
- }
- iQueryinProgress = EFalse;
- iSearchList->SetSearchId( iQueryId );
- iSearchList->Sort();
-
- CallObserver( MMediaFileHandlerObserver::EQueryComplete, KErrNone );
- }
- }
- else
- {
- CallObserver( MMediaFileHandlerObserver::EError, KErrNotSupported );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryArtistL
-//
-// Finds all music files for one artist. Query results are placed in
-// CArtistQuery.
-// CArtistQuery can then be used for artist subqueries (all albums, one album,
-// all songs, unknown songs).
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryArtistL( TInt aAttr, const TDesC& aArtist,
- const TDesC& aAlbum, TBool aRefresh )
- {
- LeaveIfSessionClosedL();
-
- if ( aAttr != EQueryArtist && aAttr != EQueryArtistAlbum &&
- aAttr != EQueryArtistAll && aAttr != EQueryArtistUnknown )
- {
- User::Leave( KErrNotSupported );
- }
-
- TBool updateFromDatabase = aRefresh;
- if ( iArtistQuery->Artist().Compare( aArtist ) != 0 )
- {
- updateFromDatabase = ETrue;
- }
-
- if ( updateFromDatabase )
- {
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &namePropertyDef );
- CMdEPropertyDef& albumPropertyDef = PropertyDefL( EAttrAlbum );
- iQuery->AddPropertyFilterL( &albumPropertyDef );
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- CMdEPropertyDef& propertyDef = PropertyDefL( EAttrArtist );
- conditions.AddPropertyConditionL( propertyDef,
- ETextPropertyConditionCompareEquals, aArtist );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- iArtistQuery->SetArtistL( aArtist );
- iArtistQuery->SetAlbumL( aAlbum );
- iQuery->FindL();
- iQueryType = EQueryArtist;
- }
- else
- {
- iArtistQuery->SetAlbumL( aAlbum );
- QueryArtistEmptyL();
- iQueryType = EQueryArtistEmpty;
- }
-
- iArtistQuery->SetQueryType( aAttr );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryArtistEmptyL
-//
-// Makes empty query. Query results were previously placed into CArtistQuery.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryArtistEmptyL()
- {
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Object::KBaseObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- iQuery->FindL( 1 );
-
- iQueryType = EQueryArtistEmpty;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryMusicL
-//
-// Finds music files.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryMusicL( TInt /*aAttr*/ )
- {
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& musicObjectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, musicObjectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &namePropertyDef );
- CMdEPropertyDef& fileTypePropertyDef = PropertyDefL( EAttrMediaType );
- iQuery->AddPropertyFilterL( &fileTypePropertyDef );
-
-
- CMdELogicCondition& conditions = iQuery->Conditions();
-
- // include properties that identify music
- IncludeMusicPropertiesL( conditions );
-
- //
- // example of defining sort order
- //
- // iQuery->AppendOrderRuleL( TMdEOrderRule( namePropertyDef, ESortAscending ) );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- iQuery->FindL();
-
- iQueryType = EQueryMusic;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryMusicL
-//
-// Finds music files with attibute that matches aFindText. Supported attributes
-// are EAttrArtist, EAttrAlbum, EAttrGenre and EAttrComposer.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryMusicL( TInt aAttr, const TDesC& aFindText )
- {
- LeaveIfSessionClosedL();
- CheckAttrL( aAttr );
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &namePropertyDef );
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- CMdEPropertyDef& propertyDef = PropertyDefL( aAttr );
- conditions.AddPropertyConditionL( propertyDef,
- ETextPropertyConditionCompareEquals, aFindText );
- IncludeMusicPropertiesL( conditions );
- iQuery->SetResultMode( EQueryResultModeItem );
-
- iQuery->FindL();
-
- iQueryType = EQueryMusic;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryVideosL
-//
-// Finds all video files.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryVideosL( TInt /*aAttr*/ )
- {
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& videoObjectDef =
- defNS.GetObjectDefL( MdeConstants::Video::KVideoObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, videoObjectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &namePropertyDef );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- iQuery->FindL();
-
- iQueryType = EQueryVideo;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryAttributeValuesL
-//
-// Finds all different values for aAttr (all artists, albums, genres,
-// or composers).
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryAttributeValuesL( TInt aAttr )
- {
- LeaveIfSessionClosedL();
- CheckAttrL( aAttr );
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- iQuery->SetResultMode( EQueryResultModeDistinctValues );
-
- CMdEPropertyDef& propertyDef = PropertyDefL( aAttr );
-
- // distinct query requires exactly one property filter
- // (eg. attribute that is included in query result)
- CMdELogicCondition& conditions = iQuery->Conditions();
- conditions.AddPropertyConditionL( propertyDef );
- iQuery->AddPropertyFilterL( &propertyDef );
- IncludeMusicPropertiesL( conditions );
- iQuery->FindL();
-
- iQueryType = EQueryMusic;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryMusicUnknownL
-//
-// Find music files that do not have attribute aAttr (eg find all files without
-// album attribute).
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryMusicUnknownL( TInt aAttr )
- {
- LeaveIfSessionClosedL();
- CheckAttrL( aAttr );
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- CMdEPropertyDef& propertyDef = PropertyDefL( aAttr );
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
-
-
- CMdELogicCondition& conditions = iQuery->Conditions();
-
- // include properties that identify music
- IncludeMusicPropertiesL( conditions );
-
- // add condition: get music that do not have aAttr attribute
- CMdELogicCondition& condition =
- conditions.AddLogicConditionL( ELogicConditionOperatorAnd );
- condition.AddPropertyConditionL( propertyDef );
- condition.SetNegate( ETrue );
-
- // set attributes that are included in query result
- iQuery->AddPropertyFilterL( &namePropertyDef );
-
- iQuery->FindL();
-
- iQueryType = EQueryMusic;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryMusicUnknownCountL
-//
-// Find whether there are music files that do not have attribute aAttr
-// (eg files without album attribute)
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryMusicUnknownCountL( TInt aAttr )
- {
- LeaveIfSessionClosedL();
- CheckAttrL( aAttr );
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- CMdEPropertyDef& propertyDef = PropertyDefL( aAttr );
-
- CMdELogicCondition& conditions = iQuery->Conditions();
-
- // include properties that identify music
- IncludeMusicPropertiesL( conditions );
-
- // add condition: get music that do not have aAttr attribute
- CMdELogicCondition& condition =
- conditions.AddLogicConditionL( ELogicConditionOperatorAnd );
- condition.AddPropertyConditionL( propertyDef );
- condition.SetNegate( ETrue );
-
-
- // count 0 or 1 is enough for UI
- iQuery->FindL( 1 );
- iQueryType = EQueryUnknown;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryEmptyL
-//
-// Makes empty query.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryEmptyL()
- {
- LeaveIfSessionClosedL();
- iQueryType = EQueryEmpty;
- if ( iQuery )
- {
- iQuery->SetResultMode( EQueryResultModeItem );
- HandleQueryCompleted( *iQuery , KErrNone);
- }
- else
- {
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Object::KBaseObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- iQuery->SetResultMode( EQueryResultModeItem );
- iQuery->FindL( 0 );
-
- }
- }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryRomEmptyL( TInt aQueryType )
-//
-// Makes empty query.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryRomEmptyL( TInt aQueryType )
- {
- LeaveIfSessionClosedL();
- if ( iQuery )
- {
- iQueryType = aQueryType;
- HandleQueryCompleted( *iQuery , KErrNone);
- }
- else
- {
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Object::KBaseObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- iQuery->SetResultMode( EQueryResultModeItem );
- iQuery->FindL( 0 );
-
- iQueryType = aQueryType;
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryRecordingsL
-//
-// Finds all recordings.
-//
-// Note: File is considered a recording if file extension is "amr" or "wav" and
-// file is not in rom.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryRecordingsL( TInt /*aAttr*/ )
- {
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& musicObjectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, musicObjectDef, this );
-
-
- // set attributes that are included in query result
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &namePropertyDef );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- CMdEPropertyDef& fileTypeDef = PropertyDefL( EAttrMediaType );
-
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- CMdEObjectCondition& cond = conditions.AddObjectConditionL(
- EObjectConditionCompareUriBeginsWith, KDriveZ );
- cond.SetNegate( ETrue );
-
-
- CMdELogicCondition& condition =
- conditions.AddLogicConditionL( ELogicConditionOperatorOr );
- condition.AddPropertyConditionL( fileTypeDef,
- ETextPropertyConditionCompareContains, KMimeTypeAMR );
- condition.AddPropertyConditionL( fileTypeDef,
- ETextPropertyConditionCompareContains, KMimeTypeWAV );
-
- iQuery->FindL();
-
- iQueryType = EQueryRecording;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryTonesL
-//
-// Finds all tones.
-// Note: Audio file is considered a tone if it is not music or video.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryTonesL( TInt /*aAttr*/ )
- {
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& musicObjectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, musicObjectDef, this );
-
-
- // set attributes that are included in query result
- CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &namePropertyDef );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- ExcludeMusicPropertiesL( conditions );
-
- iQuery->FindL();
-
- iQueryType = EQueryTone;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryDefaultTonesL
-//
-// Finds all sound files from rom (nokia default tones).
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::QueryDefaultTonesL( TInt /*aAttr*/ )
- {
-
- if ( iRomScanState == MMediaFileHandlerObserver::ERomScanComplete )
- {
- QueryRomEmptyL( EQueryTone );
- }
- else if ( iRomScanState == MMediaFileHandlerObserver::ERomScanInProgress )
- {
- iQueryinProgress = ETrue;
- }
- else
- {
- //Rom scan not start or failed for some reason
- iQueryinProgress = ETrue;
- StartRomScaning( EQueryTone );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryDefaultTTonessL
-//
-// Finds all sound files from rom (nokia default tones).
-// -----------------------------------------------------------------------------
-//
-//void CMediaFileHandler::QueryDefaultTonesL( TInt /*aAttr*/ )
-// {
-// LeaveIfSessionClosedL();
-//
-// CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
-// CMdEObjectDef& musicObjectDef =
-// defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-//
-// delete iQuery;
-// iQuery = NULL;
-// iQuery = iSession->NewObjectQueryL( defNS, musicObjectDef, this );
-//
-//
-// // set attributes that are included in query result
-// CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName );
-// iQuery->AddPropertyFilterL( &namePropertyDef );
-//
-// iQuery->SetResultMode( EQueryResultModeItem );
-//
-// CMdELogicCondition& conditions = iQuery->Conditions();
-// CMdEObjectCondition& cond = conditions.AddObjectConditionL(
-// EObjectConditionCompareUriBeginsWith, KDriveZ );
-//
-// iQuery->FindL();
-//
-// iQueryType = EQueryTone;
-// }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SearchL
-//
-// Finds all music, tone and video files with any attibute that
-// matches aFindText.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SearchL( const TDesC& aSearchText )
- {
- //
- // search is done in 3 steps, SearchTonesL and SearchVideoL are
- // called after SearchMusicL is done. Search results are collected
- // in iSearchList.
- //
-
- if ( aSearchText.Length() == 0 )
- {
- iSearchText = KNullDesC;
- QueryEmptyL();
- }
- else
- {
- StrCopy( iSearchText, aSearchText );
- SearchMusicL( iSearchText );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SearchAudioL
-//
-// Finds all audio files with attibute that matches aFindText.
-// Searched attributes are name, artist, album, genre, composer.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SearchAudioL( const TDesC& aSearchText )
- {
- SearchMusicL( aSearchText );
- iQueryType = ESearchAudio;
-
- /*
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& song = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &song );
-
- CMdEPropertyDef& artist = PropertyDefL( EAttrArtist );
- iQuery->AddPropertyFilterL( &artist );
- CMdEPropertyDef& album = PropertyDefL( EAttrAlbum );
- iQuery->AddPropertyFilterL( &album );
- CMdEPropertyDef& genre = PropertyDefL( EAttrGenre );
- iQuery->AddPropertyFilterL( &genre );
- CMdEPropertyDef& composer = PropertyDefL( EAttrComposer );
- iQuery->AddPropertyFilterL( &composer );
-
- CMdEPropertyDef& fileTypePropertyDef = PropertyDefL( EAttrMediaType );
- iQuery->AddPropertyFilterL( &fileTypePropertyDef );
-
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- conditions.SetOperator( ELogicConditionOperatorAnd );
-
- IncludeMusicSearchConditionL( conditions, aSearchText );
-
-
-
- // iQuery->AppendOrderRuleL( TMdEOrderRule( song, ESortAscending ) );
- iQuery->SetResultMode( EQueryResultModeItem );
- iQuery->FindL();
-
- iQueryType = ESearchAudio;
- */
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SearchMusicL
-//
-// Finds all music with attibute that matches aFindText.
-// Searched attributes are name, artist, album, genre, composer.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SearchMusicL( const TDesC& aSearchText )
- {
- LeaveIfSessionClosedL();
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& songName = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &songName );
- CMdEPropertyDef& fileTypePropertyDef = PropertyDefL( EAttrMediaType );
- iQuery->AddPropertyFilterL( &fileTypePropertyDef );
-
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- conditions.SetOperator( ELogicConditionOperatorAnd );
-
- //IncludeMusicPropertiesL( conditions );
- IncludeMusicSearchConditionL( conditions, aSearchText );
-
- iQuery->SetResultMode( EQueryResultModeItem );
- iQuery->FindL();
-
- iQueryType = ESearchMusic;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SearchTonesL
-//
-// Finds all tones with attibute that matches aFindText.
-// Searched attribute is file name.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SearchTonesL( const TDesC& /*aSearchText */)
- {
- if ( iRomScanState == MMediaFileHandlerObserver::ERomScanComplete )
- {
- QueryRomEmptyL( ESearchTones );
- }
- else if ( iRomScanState == MMediaFileHandlerObserver::ERomScanInProgress )
- {
- iQueryinProgress = ETrue;
- }
- else
- {
- //Rom scan not start or failed for some reason
- iQueryinProgress = ETrue;
- StartRomScaning( ESearchTones );
- }
- }
-
-//
-//// -----------------------------------------------------------------------------
-//// CMediaFileHandler::SearchTonesL
-////
-//// Finds all tones with attibute that matches aFindText.
-//// Searched attribute is file name.
-//// -----------------------------------------------------------------------------
-////
-//void CMediaFileHandler::SearchTonesL( const TDesC& aSearchText )
-// {
-// LeaveIfSessionClosedL();
-//
-// CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
-// CMdEObjectDef& objectDef =
-// defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-//
-// delete iQuery;
-// iQuery = NULL;
-// iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-//
-// // set attributes that are included in query result
-// CMdEPropertyDef& songName = PropertyDefL( EAttrSongName );
-// iQuery->AddPropertyFilterL( &songName );
-// CMdEPropertyDef& fileTypePropertyDef = PropertyDefL( EAttrMediaType );
-// iQuery->AddPropertyFilterL( &fileTypePropertyDef );
-//
-//
-// CMdELogicCondition& conditions = iQuery->Conditions();
-// conditions.SetOperator( ELogicConditionOperatorAnd );
-//
-// //ExcludeMusicPropertiesL( conditions );
-// CMdEObjectCondition& cond = conditions.AddObjectConditionL(
-// EObjectConditionCompareUriBeginsWith, KDriveZ );
-//
-// IncludeToneSearchConditionL( conditions, aSearchText );
-//
-// iQuery->SetResultMode( EQueryResultModeItem );
-// iQuery->FindL();
-//
-// iQueryType = ESearchTones;
-// }
-
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SearchVideoL
-//
-// Finds all videos with attibute that matches aFindText.
-// Searched attributes are name, artist, genre.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SearchVideoL( const TDesC& aSearchText )
- {
- LeaveIfSessionClosedL();
- if ( iRomScanState != MMediaFileHandlerObserver::ERomScanComplete )
- {
-
- StartRomScaning( ESearchVideo );
- }
-
- CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Video::KVideoObject );
-
- delete iQuery;
- iQuery = NULL;
- iQuery = iSession->NewObjectQueryL( defNS, objectDef, this );
-
- // set attributes that are included in query result
- CMdEPropertyDef& songName = PropertyDefL( EAttrSongName );
- iQuery->AddPropertyFilterL( &songName );
-
- CMdELogicCondition& conditions = iQuery->Conditions();
- IncludeVideoSearchConditionL( conditions, aSearchText );
-
- iQuery->SetResultMode( EQueryResultModeItem );
-
- if ( iVideoSearchDisabled )
- {
- iQuery->FindL( 0 );
- }
- else
- {
- iQuery->FindL();
- }
-
- iQueryType = ESearchVideo;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileDialog::SearchVideo
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::SearchVideo( TAny *aObj )
- {
- CMediaFileHandler* handler = (CMediaFileHandler*) aObj;
-
- TInt err = KErrNone;
- TRAP( err, handler->SearchVideoL( handler->iSearchText ) );
-
- if ( err != KErrNone )
- {
- handler->CallObserver( MMediaFileHandlerObserver::EError, err );
- }
-
- return 0;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileDialog::SearchTones
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::SearchTones( TAny *aObj )
- {
- CMediaFileHandler* handler = (CMediaFileHandler*) aObj;
-
- TInt err = KErrNone;
- TRAP( err, handler->SearchTonesL( handler->iSearchText ) );
-
- if ( err != KErrNone )
- {
- handler->CallObserver( MMediaFileHandlerObserver::EError, err );
- }
-
- return 0;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ResultCount
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::ResultCount()
- {
- if ( !iSessionOpen )
- {
- return 0;
- }
-
- return iSearchList->Count();
- }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::Remove
-// Remove an item from list of search reuslt
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::Remove( TInt aIndex )
- {
- if( aIndex >= ResultCount() )
- {
- // Invalid index
- return;
- }
- iSearchList->Remove( aIndex );
- }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::UnknownArtistCount
-//
-// Returns 1 if artist has at least one music file without album attribute,
-// 0 otherwise.
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::UnknownArtistCount()
- {
- TInt ret = 0;
-
- TInt err = KErrNone;
- TRAP( err, ret = UnknownArtistCountL() );
- if ( err != KErrNone )
- {
- ret = 0;
- }
- return ret;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::UnknownArtistCountL
-//
-// Returns 1 if artist has at least one music file without album attribute,
-// 0 otherwise.
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::UnknownArtistCountL()
- {
- CMdEObjectQuery* artistQuery = iArtistQuery->Query();
- if ( !artistQuery )
- {
- return 0;
- }
-
- TInt count = artistQuery->Count();
- for ( TInt i=0; i<count; i++ )
- {
- CMdEObject& object = artistQuery->Result( i );
-
- CMdEPropertyDef& propDef =
- CMediaFileHandler::PropertyDefL( iSession, CMediaFileHandler::EAttrAlbum );
-
- CMdEProperty* property = NULL;
- TInt ret = object.Property( propDef, property, 0 );
- if ( ret == KErrNotFound )
- {
- return 1;
- }
- }
-
- return 0;
- }
-// -----------------------------------------------------------------------------
-// void CMediaFileHandler::StartRomScaning()
-//
-// Start rom scanning
-// -----------------------------------------------------------------------------
-//
-
-void CMediaFileHandler::StartRomScaning( TInt aQueryType )
- {
-
- if ( iRomScanState != MMediaFileHandlerObserver::ERomScanComplete )
- {
- iRomScanState = MMediaFileHandlerObserver::ERomScanInProgress;
- iRomFileList->Reset();
- TRAPD( err , iRomFileList->ReadRomFilesL() );
- if ( err != KErrNone )
- {
- iRomScanState = MMediaFileHandlerObserver::ERomScanError;
- }
- else
- {
- iRomScanState = MMediaFileHandlerObserver::ERomScanComplete;
- }
- }
-
- iSearchList->SetRomFileList( iRomFileList );
-
- if ( iQueryinProgress )
- {
- QueryRomEmptyL( aQueryType );
- }
-
- CallObserver( MMediaFileHandlerObserver::EScanRomComplete, KErrNone );
- }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::CancelQuery
-//
-// Cancels ongoing query.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::CancelQuery()
- {
- if ( !iSessionOpen || !iQuery )
- {
- return;
- }
-
- if ( !iQuery->IsComplete() )
- {
- iQuery->Cancel(); // this calls HandleQueryCompleted synchronously
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::LeaveIfSessionClosedL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::LeaveIfSessionClosedL()
- {
- if ( !iSession || !iSessionOpen )
- {
- User::Leave( KErrDisconnected );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SetObserver
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SetObserver( MMediaFileHandlerObserver* aObserver )
- {
- iObserver = aObserver;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::CheckAttrL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::CheckAttrL( TInt aAttr )
- {
- if ( aAttr != EAttrArtist && aAttr != EAttrAlbum &&
- aAttr != EAttrGenre && aAttr != EAttrComposer )
- {
- User::Leave( KErrNotSupported );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::GetAttributeL
-//
-// NOTE: GetAttributeL only gets full name or file name
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::GetAttributeL( TInt aIndex, TInt aAttr,
- TDes& aValue, TInt aQueryId )
- {
- aValue = KNullDesC;
-
- if ( !iSessionOpen )
- {
- return;
- }
-
- TInt id = iSearchList->SearchId();
- if ( id != aQueryId )
- {
- return; // search list and UI do not match
- }
-
- iSearchList->SetSession( iSession );
- iSearchList->GetAttributeL( aIndex, aAttr, aValue );
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::GetAttribute
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::GetAttribute( TInt aIndex, TInt aAttr,
- TDes& aValue, TInt aQueryId )
- {
- TRAP_IGNORE( GetAttributeL( aIndex, aAttr, aValue, aQueryId ) );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::Attribute
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::Attribute( TInt aIndex, TInt aAttr, TInt aQueryId )
- {
- if ( !iSessionOpen )
- {
- return KErrNotFound;
- }
-
- TInt id = iSearchList->SearchId();
- if ( id != aQueryId )
- {
- return KErrNotFound;
- }
-
- return iSearchList->Attribute( aIndex, aAttr );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ItemIndex
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::ItemIndex( TInt aItemId, TInt aIndex )
- {
- return iSearchList->ItemIndex( aItemId, aIndex );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ItemIndex
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::ItemIndex( const TDesC& aItemText, TInt aIndex )
- {
- return iSearchList->ItemIndex( aItemText, aIndex );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ReadMediaFileDataL
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileData* CMediaFileHandler::ReadMediaFileDataL( TInt aId )
- {
- if ( !iSessionOpen )
- {
- User::Leave( KErrNotFound );
- }
-
- CMdEObject* object = iSession->GetFullObjectL( aId );
- CleanupStack::PushL( object );
-
- CMediaFileData* data = CMediaFileData::NewL();
- CleanupStack::PushL( data );
-
- data->SetAttrL( EAttrFullName, object->Uri() );
-
- CMdEProperty* property = NULL;
- TInt ret = object->Property( PropertyDefL( EAttrSongName ), property, 0 );
- if ( ret != KErrNotFound )
- {
- data->SetAttrL( EAttrSongName, property->TextValueL() );
- }
-
- ret = object->Property( PropertyDefL( EAttrArtist ), property, 0 );
- if ( ret != KErrNotFound )
- {
- data->SetAttrL( EAttrArtist, property->TextValueL() );
- }
-
- ret = object->Property( PropertyDefL( EAttrAlbum ), property, 0 );
- if ( ret != KErrNotFound )
- {
- data->SetAttrL( EAttrAlbum, property->TextValueL() );
- }
-
- ret = object->Property( PropertyDefL( EAttrGenre ), property, 0 );
- if ( ret != KErrNotFound )
- {
- data->SetAttrL( EAttrGenre, property->TextValueL() );
- }
-
- ret = object->Property( PropertyDefL( EAttrComposer ), property, 0 );
- if ( ret != KErrNotFound )
- {
- data->SetAttrL( EAttrComposer, property->TextValueL() );
- }
-
- CleanupStack::Pop( data );
- CleanupStack::PopAndDestroy( object );
-
- return data;
- }
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ReadMediaFileDataL
-//
-// -----------------------------------------------------------------------------
-//
-CMediaFileData* CMediaFileHandler::RomMediaFileDataL( TInt aId ,TInt aMediaType )
- {
- if (!iRomFileList)
- {
- User::Leave(KErrNotFound);
- }
-
- TBuf<KBufSize128> buf;
- CMediaFileData* data = CMediaFileData::NewL();
- CleanupStack::PushL(data);
-
- if (aMediaType == EMediaTypeTone)
- {
- data->SetAttrL(EAttrFullName, iRomFileList->Item(aId, 0));
- iRomFileList->GetRomFileName(aId, 0, buf);
- data->SetAttrL(EAttrSongName, buf);
- }
-
- if (aMediaType == EMediaTypeVideo)
- {
- data->SetAttrL(EAttrFullName, iRomFileList->Item(aId, 1));
- iRomFileList->GetRomFileName(aId, 1, buf);
- data->SetAttrL(EAttrSongName, buf);
- }
-
- CleanupStack::Pop(data);
-
- return data;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::PropertyDefL
-//
-// -----------------------------------------------------------------------------
-//
-CMdEPropertyDef& CMediaFileHandler::PropertyDefL( TInt aAttr )
- {
- return PropertyDefL( iSession, aAttr );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::PropertyDefL
-//
-// -----------------------------------------------------------------------------
-//
-CMdEPropertyDef& CMediaFileHandler::PropertyDefL( CMdESession* aSession, TInt aAttr )
- {
- CMdENamespaceDef& defNS = aSession->GetDefaultNamespaceDefL();
-
- CMdEObjectDef& objectDef =
- defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject );
-
- if ( aAttr == EAttrFileSize )
- {
- return objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty );
- }
- else if ( aAttr == EAttrMediaType )
- {
- return objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty );
- }
- else if ( aAttr == EAttrSongName || aAttr == EAttrFileName )
- {
- return objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );
- }
- else if ( aAttr == EAttrArtist )
- {
- return objectDef.GetPropertyDefL( MdeConstants::MediaObject::KArtistProperty );
- }
- else if ( aAttr == EAttrAlbum )
- {
- return objectDef.GetPropertyDefL( MdeConstants::Audio::KAlbumProperty );
- }
- else if ( aAttr == EAttrGenre )
- {
- return objectDef.GetPropertyDefL( MdeConstants::MediaObject::KGenreProperty );
- }
- else if ( aAttr == EAttrComposer )
- {
- return objectDef.GetPropertyDefL( MdeConstants::Audio::KComposerProperty );
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
-
- return objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::QueryReady
-//
-// -----------------------------------------------------------------------------
-//
-TBool CMediaFileHandler::QueryReady()
- {
- if ( iIdle )
- {
- TBool isSearching = iIdle->IsActive();
- if ( isSearching )
- {
- return EFalse; // we are between audio, tone and and video search
- }
- }
-
- TBool isWaitingObserverCall = iQueryCaller->IsActive();
- if ( isWaitingObserverCall )
- {
- return EFalse; // query is ready but observer not called yet
- }
-
- if ( iQuery )
- {
- return iQuery->IsComplete();
- }
-
- return ETrue;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ExcludeMimeTypesL
-//
-// Exclude mime types from query.
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::ExcludeMimeTypesL( CMdELogicCondition& aCondition,
- TInt /*aAttr*/ )
- {
- TInt count = iExcludedMimeTypes->Count();
-
- if ( count == 0 )
- {
- return;
- }
-
- CMdEPropertyDef& fileTypeDef = PropertyDefL( EAttrMediaType );
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorAnd );
-
- for ( TInt i=0; i<count; i++ )
- {
- TPtrC ptr = iExcludedMimeTypes->MimeType( i );
- condition.AddPropertyConditionL( fileTypeDef,
- ETextPropertyConditionCompareEquals, ptr );
- }
- condition.SetNegate( ETrue );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::IncludeMusicPropertiesL
-//
-// Adds properties that are used to find out whether media file is music.
-// File is considered music if:
-// 1. it has metadata artist or album or genre or composer
-// 2. its mime type is 'music' mime type (eg mp3)
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::IncludeMusicPropertiesL( CMdELogicCondition& aCondition )
- {
- ExcludeRomFilesL( aCondition );
-// CMdEObjectCondition& cond = aCondition.AddObjectConditionL(
-// EObjectConditionCompareUriBeginsWith, KDriveZ );
-// cond.SetNegate( ETrue );
-
-// CMdELogicCondition& condition =
-// aCondition.AddLogicConditionL( ELogicConditionOperatorAnd );
- ExcludeRecordingsL( aCondition );
-// CMdEPropertyDef& fileTypeDef = PropertyDefL( EAttrMediaType );
-// condition.AddPropertyConditionL( fileTypeDef,
-// ETextPropertyConditionCompareContains, KMimeTypeAMR );
-// condition.AddPropertyConditionL( fileTypeDef,
-// ETextPropertyConditionCompareContains, KMimeTypeWAV );
-// condition.SetNegate( ETrue );
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::IncludeMusicPropertiesL
-//
-// Adds properties that are used to find out whether media file is music.
-// File is considered music if:
-// 1. it has metadata artist or album or genre or composer
-// 2. its mime type is 'music' mime type (eg mp3)
-// -----------------------------------------------------------------------------
-//
-/*
-void CMediaFileHandler::IncludeMusicPropertiesL( CMdELogicCondition& aCondition )
- {
- //aLogicCondition.SetOperator( ELogicConditionOperatorAnd );
-
- CMdEPropertyDef& mimeTypeDef = PropertyDefL( EAttrMediaType );
- CMdEPropertyDef& artistTypeDef = PropertyDefL( EAttrArtist );
- CMdEPropertyDef& albumTypeDef = PropertyDefL( EAttrAlbum );
- CMdEPropertyDef& genreTypeDef = PropertyDefL( EAttrGenre );
- CMdEPropertyDef& composerTypeDef = PropertyDefL( EAttrComposer );
-
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorOr );
-
- condition.AddPropertyConditionL( mimeTypeDef,
- ETextPropertyConditionCompareContains, KMimeMp3 );
- condition.AddPropertyConditionL( artistTypeDef );
- condition.AddPropertyConditionL( albumTypeDef );
- condition.AddPropertyConditionL( genreTypeDef );
- condition.AddPropertyConditionL( composerTypeDef );
- }
-*/
-
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ExcludeMusicPropertiesL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::ExcludeMusicPropertiesL( CMdELogicCondition& aCondition )
- {
- CMdEPropertyDef& mimeTypeDef = PropertyDefL( EAttrMediaType );
- CMdEPropertyDef& artistTypeDef = PropertyDefL( EAttrArtist );
- CMdEPropertyDef& albumTypeDef = PropertyDefL( EAttrAlbum );
- CMdEPropertyDef& genreTypeDef = PropertyDefL( EAttrGenre );
- CMdEPropertyDef& composerTypeDef = PropertyDefL( EAttrComposer );
-
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorAnd );
-
- condition.AddPropertyConditionL( mimeTypeDef,
- ETextPropertyConditionCompareContains, KMimeMp3 );
- condition.AddPropertyConditionL( artistTypeDef );
- condition.AddPropertyConditionL( albumTypeDef );
- condition.AddPropertyConditionL( genreTypeDef );
- condition.AddPropertyConditionL( composerTypeDef );
-
- condition.SetNegate( ETrue );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::IncludeMusicSearchConditionL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::IncludeMusicSearchConditionL( CMdELogicCondition& aCondition,
- const TDesC& aSearchText )
-
- {
- _LIT( KFormat, "%S%S" );
-
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorOr );
-
- CMdEPropertyDef& songName = PropertyDefL( EAttrSongName );
- CMdEPropertyDef& artist = PropertyDefL( EAttrArtist );
- CMdEPropertyDef& album = PropertyDefL( EAttrAlbum );
- CMdEPropertyDef& genre = PropertyDefL( EAttrGenre );
- CMdEPropertyDef& composer = PropertyDefL( EAttrComposer );
-
- // first find from the start of the property
- condition.AddPropertyConditionL( songName,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
- condition.AddPropertyConditionL( artist,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
-
- condition.AddPropertyConditionL( album,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
-
- condition.AddPropertyConditionL( genre,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
-
- condition.AddPropertyConditionL( composer,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
-
- // then find from the start of property words
- TBuf<KBufSize128> buf;
- if ( aSearchText.Length() < KBufSize128-1 )
- {
- buf.Format( KFormat, &KSpace, &aSearchText );
-
- condition.AddPropertyConditionL( songName,
- ETextPropertyConditionCompareContains, buf );
- condition.AddPropertyConditionL( artist,
- ETextPropertyConditionCompareContains, buf );
- condition.AddPropertyConditionL( album,
- ETextPropertyConditionCompareContains, buf );
- condition.AddPropertyConditionL( genre,
- ETextPropertyConditionCompareContains, buf );
- condition.AddPropertyConditionL( composer,
- ETextPropertyConditionCompareContains, buf );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::IncludeVideoConditionL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::IncludeVideoSearchConditionL(
- CMdELogicCondition& aCondition, const TDesC& aSearchText )
-
- {
- _LIT( KFormat, "%S%S" );
-
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorOr );
-
- CMdEPropertyDef& songName = PropertyDefL( EAttrSongName );
- CMdEPropertyDef& artist = PropertyDefL( EAttrArtist );
- CMdEPropertyDef& genre = PropertyDefL( EAttrGenre );
-
- // first find from the start of the property
- condition.AddPropertyConditionL( songName,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
- condition.AddPropertyConditionL( artist,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
- condition.AddPropertyConditionL( genre,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
- // then find from the start of property words
- TBuf<KBufSize128> buf;
- if ( aSearchText.Length() < KBufSize128-1 )
- {
- buf.Format( KFormat, &KSpace, &aSearchText );
-
- condition.AddPropertyConditionL( songName,
- ETextPropertyConditionCompareContains, buf );
- condition.AddPropertyConditionL( artist,
- ETextPropertyConditionCompareContains, buf );
- condition.AddPropertyConditionL( genre,
- ETextPropertyConditionCompareContains, buf );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::IncludeToneSearchConditionL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::IncludeToneSearchConditionL( CMdELogicCondition& aCondition,
- const TDesC& aSearchText )
-
- {
- _LIT( KFormat, "%S%S" );
-
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorOr );
-
- CMdEPropertyDef& songName = PropertyDefL( EAttrSongName );
-
- // first find from the start of the property
- condition.AddPropertyConditionL( songName,
- ETextPropertyConditionCompareBeginsWith, aSearchText );
-
- // then find from the start of property words
- TBuf<KBufSize128> buf;
- if ( aSearchText.Length() < KBufSize128-1 )
- {
- buf.Format( KFormat, &KSpace, &aSearchText );
-
- condition.AddPropertyConditionL( songName,
- ETextPropertyConditionCompareContains, buf );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ExcludeRecordingsL
-//
-// Exclude recording mime types from query (.amr and .wav).
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::ExcludeRecordingsL( CMdELogicCondition& aCondition )
- {
- CMdEPropertyDef& mimeTypeDef = PropertyDefL( EAttrMediaType );
- CMdELogicCondition& condition =
- aCondition.AddLogicConditionL( ELogicConditionOperatorAnd );
- condition.AddPropertyConditionL( mimeTypeDef,
- ETextPropertyConditionCompareEquals, KMimeTypeAMR );
- condition.AddPropertyConditionL( mimeTypeDef,
- ETextPropertyConditionCompareEquals, KMimeTypeWAV );
- condition.SetNegate( ETrue );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::ExcludeRomFilesL
-//
-// Exclude music files that are in rom (default tones).
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::ExcludeRomFilesL( CMdELogicCondition& aCondition )
- {
- _LIT( KDriveZ, "z:\\" );
-
- CMdEObjectCondition& cond = aCondition.AddObjectConditionL(
- EObjectConditionCompareUriBeginsWith, KDriveZ );
- cond.SetNegate( ETrue );
- }
-
-
-// -------------------------------------------------------------------------------
-// CMediaFileHandler::StrCopy
-//
-// String copy with lenght check.
-// -------------------------------------------------------------------------------
-//
-void CMediaFileHandler::StrCopy( TDes& aTarget, const TDesC& aSource )
- {
- TInt len = aTarget.MaxLength();
- if( len < aSource.Length() )
- {
- aTarget.Copy( aSource.Left( len ) );
- return;
- }
- aTarget.Copy( aSource );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::EnableObserverCall
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::EnableObserverCall( TBool aEnable )
- {
- iObserverCallEnabled = aEnable;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::CallObserver
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::CallObserver( TInt aEvent, TInt aError )
- {
- const TInt KDelay = 100; // milliseconds
-
- if ( !iObserverCallEnabled )
- {
- return;
- }
-
- iQueryError = aError;
- iQueryEvent = aEvent;
-
- iQueryCaller->Start( 0, KDelay );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::CallObserverWithDelay
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::CallObserverWithDelay()
- {
- const TInt KOneSecond = 1000;
-
- if ( !iObserverCallEnabled )
- {
- return;
- }
-
- iObjectNotificationCaller->Start( 1, 2*KOneSecond );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::HandleActiveCallL (from MMFActiveCallerObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::HandleActiveCallL( TInt aCallId )
- {
- if ( !iObserver )
- {
- return;
- }
-
- // inform observer that query is ready
- if ( aCallId == 0 )
- {
- TRAP_IGNORE( iObserver->HandleMFEventL( iQueryEvent, iQueryError ) );
- }
-
- // inform observer that database has changed
- if ( aCallId == 1 )
- {
- if ( QueryReady() )
- {
- TRAP_IGNORE( iObserver->HandleMFEventL( MMediaFileHandlerObserver::EMediaFileChanged, KErrNone ) );
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::SetQueryId
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::SetQueryId( TInt aId )
- {
- // this id is passed to CSearchList after successful database search
- iQueryId = aId;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::Panic
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaFileHandler::Panic( TInt aReason )
- {
- _LIT( KPanicCategory, "CMediaFileHandler" );
-
- User::Panic( KPanicCategory, aReason );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMediaFileHandler::MediaType
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMediaFileHandler::MediaType( TInt aQueryType )
- {
- TInt mediaType = EMediaTypeMusic;
- if ( aQueryType == EQueryVideo )
- {
- mediaType = EMediaTypeVideo;
- }
- if ( aQueryType == EQueryRecording )
- {
- mediaType = EMediaTypeRecording;
- }
- if ( aQueryType == EQueryTone )
- {
- mediaType = EMediaTypeTone;
- }
-
- return mediaType;
- }
-
-
-
-/******************************************************************************
- * class CSearchListItem
- ******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CSearchListItem::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CSearchListItem* CSearchListItem::NewLC()
- {
- CSearchListItem* self = new (ELeave) CSearchListItem();
- CleanupStack::PushL( self );
- self->ConstructL();
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchListItem::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CSearchListItem* CSearchListItem::NewL()
- {
- CSearchListItem* self = new (ELeave) CSearchListItem();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CSearchListItem::~CSearchListItem()
- {
- delete iTitle;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchListItem::CSearchListItem
-//
-// -----------------------------------------------------------------------------
-//
-CSearchListItem::CSearchListItem()
- {
- iId = KErrNotFound;
- iMediaType = KErrNotFound;
- iStorageType = KErrNotFound;
- iTitle = NULL;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchListItem::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchListItem::ConstructL()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CSearchListItem::SetTitleL
-//
-// -----------------------------------------------------------------------------
-//
-
-void CSearchListItem::SetTitleL( const TDesC& aText, TBool aFullName )
- {
- delete iTitle;
- iTitle = NULL;
-
- if ( aFullName )
- {
- TParsePtrC parse( aText );
- iTitle = parse.Name().AllocL();
- }
- else
- {
- iTitle = aText.AllocL();
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchListItem::Title
-//
-// -----------------------------------------------------------------------------
-//
-
-const TDesC& CSearchListItem::Title() const
- {
- return *iTitle;
- }
-
-
-
-
-/******************************************************************************
- * class CRomFileList
- ******************************************************************************/
-
-
-
-// -----------------------------------------------------------------------------
-// Static constructor function CRomFileList::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CRomFileList* CRomFileList::NewL()
- {
- CRomFileList* self = new (ELeave) CRomFileList();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CRomFileList::~CRomFileList()
- {
- iRomToneList.ResetAndDestroy();
- iRomVideoList.ResetAndDestroy();
- iList.Reset();
- iList.Close();
- iVedioList.Reset();
- iVedioList.Close();
- }
-
-
-// -----------------------------------------------------------------------------
-// CRomFileList::CRomFileList
-//
-// -----------------------------------------------------------------------------
-//
-CRomFileList::CRomFileList()
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// CRomFileList::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CRomFileList::ConstructL()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CRomFileList::RomFileItem( TInt aIndex )
-//
-// -----------------------------------------------------------------------------
-//
-TInt CRomFileList::RomFileItem( CSearchListItem* aItem, TInt aIndex)
- {
- if( aIndex >= 0 && aIndex < iRomToneList.Count() )
- {
- aItem->iId = iRomToneList[aIndex]->iId;
- aItem->iMediaType = iRomToneList[aIndex]->iMediaType;
- aItem->iStorageType = iRomToneList[aIndex]->iStorageType;
- TPtrC title = iRomToneList[aIndex]->Title();
- aItem->SetTitleL( title, EFalse );
- return KErrNone;
- }
- return KErrGeneral;
- }
-
-// -----------------------------------------------------------------------------
-// CRomFileList::RomVedioItem( TInt aIndex )
-//
-// -----------------------------------------------------------------------------
-//
-TInt CRomFileList::RomVedioItem( CSearchListItem* aItem, TInt aIndex)
- {
- if( aIndex >= 0 && aIndex < iRomVideoList.Count() )
- {
- aItem->iId = iRomVideoList[aIndex]->iId;
- aItem->iMediaType = iRomVideoList[aIndex]->iMediaType;
- aItem->iStorageType = iRomVideoList[aIndex]->iStorageType;
- TPtrC title = iRomVideoList[aIndex]->Title();
- aItem->SetTitleL( title, EFalse );
- return KErrNone;
- }
- return KErrGeneral;
- }
-// -----------------------------------------------------------------------------
-// CRomFileList::Count()
-//
-// -----------------------------------------------------------------------------
-//
-
-TInt CRomFileList::Count(TInt aType )
- {
- if ( aType == 0 )
- {
- //Tone item count
- return iRomToneList.Count();
- }
- else if ( aType == 1 )
- {
- // Video item count()
- return iRomVideoList.Count();
- }
- return KErrNotSupported;
- }
-
-// -----------------------------------------------------------------------------
-// CRomFileList::Reset()
-//
-// -----------------------------------------------------------------------------
-//
-
-void CRomFileList::Reset()
- {
- iRomToneList.Reset();
- iRomVideoList.Reset();
- iList.Reset();
- iVedioList.Reset();
- }
-// -----------------------------------------------------------------------------
-// CRomFileList::ReadRomFilesL()
-//
-// -----------------------------------------------------------------------------
-//
-
-void CRomFileList::ReadRomFilesL()
- {
- _LIT( KFormat, "%S%S" );
-
- iRomToneList.ResetAndDestroy();
- iList.Reset();
-
- iFileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::SoundsPath() );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iRomToneList ) );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iList ) );
-
- iFileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::DigitalSoundsPath() );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iRomToneList ) );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iList ) );
-
- iFileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::SimpleSoundsPath() );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iRomToneList ) );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iList ) );
-
- TRAP_IGNORE( ReadRomVediosL() );
- }
-
-
-// -----------------------------------------------------------------------------
-// CRomFileList::ReadRomFilesL()
-//
-// -----------------------------------------------------------------------------
-//
-
-void CRomFileList::ReadRomVediosL()
- {
- _LIT( KFormat, "%S%S" );
-
- iRomVideoList.Reset();
- iVedioList.Reset();
-
- iFileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::VideosPath() );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iRomVideoList ) );
- TRAP_IGNORE( ReadDirectoryL( iFileName, iVedioList ) );
-
- if ( iRomVideoList.Count() > 0 )
- {
- for( TInt i(0); i < iRomVideoList.Count(); i++)
- {
- iRomVideoList[i]->iMediaType = CMediaFileHandler::EMediaTypeVideo;
- }
- }
-
- }
-
-
-// -----------------------------------------------------------------------------
-// TDesC& CRomFileList::Item( TInt aIndex )
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC& CRomFileList::Item(TInt aIndex, TInt aType)
- {
- TInt count = 0;
- if ( aType == 0 )
- {
- count = iList.Count();
- if (aIndex >= 0 && aIndex < count)
- {
- return iList[aIndex];
- }
- }
- else if ( aType == 1 )
- {
- count = iVedioList.Count();
- if (aIndex >= 0 && aIndex < count)
- {
- return iVedioList[aIndex];
- }
- }
- return KNullDesC;
- }
-
-
-// -----------------------------------------------------------------------------
-// CRomFileList::ReadDirectoryL( const TDesC& aDirectory,
-// RPointerArray<CSearchListItem>& aList )
-//
-// -----------------------------------------------------------------------------
-//
-
-void CRomFileList::ReadDirectoryL( const TDesC& aDirectory,
- RPointerArray<CSearchListItem>& aList )
- {
- _LIT( KFormat, "%S%S" );
-
- CDir* dir = NULL;
- RFs fsSession;
- User::LeaveIfError( fsSession.Connect() );
- CleanupClosePushL( fsSession );
-
- if ( !BaflUtils::FolderExists( fsSession, aDirectory ) )
- {
- User::Leave( KErrNotFound );
- }
-
- TInt err = fsSession.GetDir( aDirectory, KEntryAttNormal, ESortByName, dir );
- User::LeaveIfError( err );
- CleanupStack::PushL( dir );
- TInt index;
- TInt count = dir->Count();
- TFileName filename;
- for ( TInt i=0; i<count; i++ )
- {
- const TEntry item = (*dir)[i];
- filename.Format( KFormat, &aDirectory, &item.iName );
- index = aList.Count();
- CSearchListItem* item2 = SearchListItemFromRomL( filename, index );
- aList.AppendL( item2 );
- }
-
- CleanupStack::PopAndDestroy( dir );
-
- CleanupStack::PopAndDestroy(); // fsSession
- }
-
-// -----------------------------------------------------------------------------
-// CRomFileList::ReadDirectoryL( const TDesC& aDirectory,
-// RPointerArray<CSearchListItem>& aList )
-//
-// -----------------------------------------------------------------------------
-//
-
-void CRomFileList::ReadDirectoryL( const TDesC& aDirectory,
- RArray<TFileName>& aList )
- {
- _LIT( KFormat, "%S%S" );
-
- CDir* dir = NULL;
- RFs fsSession;
- User::LeaveIfError( fsSession.Connect() );
- CleanupClosePushL( fsSession );
-
- if ( !BaflUtils::FolderExists( fsSession, aDirectory ) )
- {
- User::Leave( KErrNotFound );
- }
-
- TInt err = fsSession.GetDir( aDirectory, KEntryAttNormal, ESortByName, dir );
- User::LeaveIfError( err );
- CleanupStack::PushL( dir );
-
- TInt count = dir->Count();
- TFileName filename;
- for ( TInt i=0; i<count; i++ )
- {
- const TEntry item = (*dir)[i];
- filename.Format( KFormat, &aDirectory, &item.iName );
- aList.AppendL( filename );
- }
-
- CleanupStack::PopAndDestroy( dir );
-
- CleanupStack::PopAndDestroy(); // fsSession
- }
-// -----------------------------------------------------------------------------
-// CRomFileList::SearchListItemFromRomL( const TDesC& aFileName )
-//
-// -----------------------------------------------------------------------------
-//
-
-CSearchListItem* CRomFileList::SearchListItemFromRomL( const TDesC& aFileName ,TInt aIndex )
- {
- TParsePtrC parsedName( aFileName );
-
- CSearchListItem* item = CSearchListItem::NewLC();
-
- item->iId = aIndex;
- item->SetTitleL( aFileName , ETrue);
- item->iStorageType = CMediaFileHandler::ERomStorage;
- item->iMediaType = CMediaFileHandler::EMediaTypeTone;
-
- CleanupStack::Pop(); // item
-
- return item;
- }
-
-// -----------------------------------------------------------------------------
-// CRomFileList::GetRomFileName
-//
-// -----------------------------------------------------------------------------
-//
-TInt CRomFileList::GetRomFileName(TInt aIndex, TInt aType, TDes& aValue)
- {
- //return title of rom item;
- if (aType == 0)
- {
- if (aIndex >= 0 && aIndex < Count(0))
- {
- aValue.Copy( iRomToneList[aIndex]->Title() );
- return KErrNone;
- }
- return KErrGeneral;
- }
- else if (aType == 1)
- {
- if (aIndex >= 0 && aIndex < Count(1))
- {
- aValue.Copy(iRomVideoList[aIndex]->Title());
- return KErrNone;
- }
- return KErrGeneral;
- }
- return KErrNotFound;
- }
-
-
-/******************************************************************************
- * class CSearchList
- ******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CSearchList* CSearchList::NewL()
- {
- CSearchList* self = new (ELeave) CSearchList();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CSearchList::~CSearchList()
- {
- iList.ResetAndDestroy();
- delete iDriveUtil;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::CSearchList
-//
-// -----------------------------------------------------------------------------
-//
-CSearchList::CSearchList()
- {
- iSearchId = KErrNotFound;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::ConstructL()
- {
- iDriveUtil = CDriveUtil::NewL();
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::SetSession
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::SetSession( CMdESession* aSession )
- {
- iSession = aSession;
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::SetRomFileList
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::SetRomFileList( CRomFileList* aRomFileList )
- {
- iRomFileList = aRomFileList;
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::SetSearchId
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::SetSearchId( TInt aSearchId )
- {
- iSearchId = aSearchId;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::SearchId
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::SearchId()
- {
- return iSearchId;
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::Remove
-// Remove an item from the list of search results
-// -----------------------------------------------------------------------------
-//
-void CSearchList::Remove( TInt aIndex )
- {
- iList.Remove( aIndex );
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::TakeResultL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::TakeResultL( CMdEObjectQuery* aQuery, TInt aMediaType )
- {
- if ( !aQuery )
- {
- return;
- }
- CMdEObjectQuery* query = static_cast<CMdEObjectQuery*> (aQuery);
- TInt count = query->Count();
-
- for (TInt i = 0; i < count; i++)
- {
- CMdEObject* object = (CMdEObject*) query->TakeOwnershipOfResult(i);
- CleanupStack::PushL(object);
- AddItemL(*object, aMediaType);
- CleanupStack::PopAndDestroy(object);
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::SearchInToneL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::SearchInToneL( CRomFileList* aQuery, const TDesC& aSearchText )
- {
- if ( !aQuery )
- {
- return;
- }
- TInt error = KErrNone;
- TInt count = aQuery->Count( 0 );
- for( int i = 0; i< count; i++ )
- {
- CSearchListItem* item = CSearchListItem::NewL();
- error = aQuery->RomFileItem( item, i );
- if ( error == KErrNone )
- {
- TPtrC title = item->Title();
- TInt rt = title.FindF( aSearchText );
- if ( rt != KErrNotFound )
- {
- iList.AppendL( item );
- }
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::VideoSearchInRomL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::VideoSearchInRomL( CRomFileList* aQuery, const TDesC& aSearchText )
- {
- if ( !aQuery )
- {
- return;
- }
- TInt error = KErrNone;
- TInt count = aQuery->Count( 1 );
- for( int i = 0; i< count; i++ )
- {
- CSearchListItem* item = CSearchListItem::NewL();
- error = aQuery->RomVedioItem( item, i );
- if ( error == KErrNone )
- {
- TPtrC title = item->Title();
- TInt rt = title.FindF( aSearchText );
- if ( rt != KErrNotFound )
- {
- iList.AppendL( item );
- }
- }
- }
- }
-// -----------------------------------------------------------------------------
-// CSearchList::TakeArtistResultL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::TakeArtistResultL( CArtistQuery* aArtistQuery )
- {
- if ( !aArtistQuery )
- {
- return;
- }
-
- CMdEObjectQuery* query = aArtistQuery->Query();
- if ( !query )
- {
- return;
- }
- TInt queryType = aArtistQuery->QueryType();
-
-
- TInt count = query->Count();
- for ( TInt i=0; i<count; i++ )
- {
- CMdEObject& object = query->Result( i );
- AddArtistItemL( object, queryType, aArtistQuery->Album() );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::TakeDistinctResultL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::TakeDistinctResultL( CMdEObjectQuery* aQuery,
- TInt /*aMediaType*/ )
- {
- if ( !aQuery )
- {
- return;
- }
-
- TInt count = aQuery->Count();
-
- for ( TInt i=0; i<count; i++ )
- {
- TPtrC ptr = aQuery->ResultDistinctValue( i );
-
- CSearchListItem* item = CSearchListItem::NewLC();
-
- item->SetTitleL( ptr, EFalse );
- item->iMediaType = KErrNotFound;
- item->iStorageType = KErrNotFound;
-
- iList.AppendL( item );
-
- CleanupStack::Pop( item );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::AddItemL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::AddItemL( CMdEObject& aObject, TInt aMediaType )
- {
- CSearchListItem* item = CSearchListItem::NewLC();
-
- TPtrC songName = TextL( aObject, CMediaFileHandler::EAttrSongName );
-
- if ( songName.Length() > 0 )
- {
- item->SetTitleL( songName, EFalse );
- }
- else
- {
- item->SetTitleL( aObject.Uri(), ETrue );
- }
-
-
- item->iId = aObject.Id();
- item->iMediaType = aMediaType;
-
- TInt storageType = CMediaFileHandler::EPhoneMemory;
- if ( iDriveUtil->IsMemoryCard( aObject.Uri() ) )
- {
- storageType = CMediaFileHandler::EMemoryCard;
- }
- else if ( iDriveUtil->IsMassStorage( aObject.Uri() ) )
- {
- storageType = CMediaFileHandler::EMassStorage;
- }
- item->iStorageType = storageType;
-
- iList.AppendL( item );
-
- CleanupStack::Pop( item );
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::AddRomItemL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::AddRomItemL( CRomFileList* aRomList, TInt aMediaType )
- {
- if ( !aRomList )
- {
- return;
- }
-
- TInt count =0;
- TInt error = KErrNone;
- if ( aMediaType == CMediaFileHandler::EMediaTypeTone )
- {
- count = aRomList->Count( 0 );
- for ( TInt i=0; i< count; i++ )
- {
- CSearchListItem* item = CSearchListItem::NewL();
- error = aRomList->RomFileItem( item, i );
- if ( error == KErrNone )
- {
- iList.AppendL( item );
- }
- }
- }
- else if ( aMediaType == CMediaFileHandler::EMediaTypeVideo )
- {
- count = aRomList->Count( 1 );
- for (TInt i = 0; i < count; i++)
- {
- CSearchListItem* item = CSearchListItem::NewL();
- error = aRomList->RomVedioItem(item, i);
- if (error == KErrNone)
- {
- iList.AppendL(item);
- }
- }
- }
-
- }
-
-// -----------------------------------------------------------------------------
-// CSearchList::AddAlbumItemL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::AddAlbumItemL( const TDesC& aAlbum )
- {
- TLinearOrder<CSearchListItem> sortFunction( CSearchList::Compare );
-
- CSearchListItem* item = CSearchListItem::NewLC();
-
- item->SetTitleL( aAlbum, EFalse );
-
- CleanupStack::Pop( item );
-
- item->iMediaType = KErrNotFound;
- item->iStorageType = KErrNotFound;
- item->iId = KErrNotFound;
-
- TInt err = iList.InsertInOrder( item, sortFunction );
- if ( err != KErrNone )
- {
- delete item;
- }
- if ( err != KErrNone && err != KErrAlreadyExists )
- {
- User::Leave( err );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::AddArtistItemL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::AddArtistItemL( CMdEObject& aObject,
- TInt aQueryType, const TDesC& aAlbum )
- {
- // all songs for one artist
- if ( aQueryType == CMediaFileHandler::EQueryArtistAll )
- {
- AddItemL( aObject, CMediaFileHandler::EMediaTypeMusic );
- return;
- }
-
- TPtrC album = TextL( aObject, CMediaFileHandler::EAttrAlbum );
-
- // unknown songs (no album metadata) for one artist
- if ( aQueryType == CMediaFileHandler::EQueryArtistUnknown )
- {
- if ( album.Length() == 0 )
- {
- AddItemL( aObject, CMediaFileHandler::EMediaTypeMusic );
- }
- }
-
- // all albums for one artist
- if ( aQueryType == CMediaFileHandler::EQueryArtist )
- {
- if ( album.Length() > 0 )
- {
- AddAlbumItemL( album );
- }
- }
-
- // songs in one album
- if ( aQueryType == CMediaFileHandler::EQueryArtistAlbum )
- {
- if ( album.Length() > 0 )
- {
- if ( album.Compare( aAlbum ) == 0 )
- {
- AddItemL( aObject, CMediaFileHandler::EMediaTypeMusic );
- }
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::Sort
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::Sort()
- {
- iList.Sort( TLinearOrder<CSearchListItem>(CSearchList::Compare) );
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::Reset
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::Reset()
- {
- iSearchId = KErrNotFound;
- iList.ResetAndDestroy();
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::Count
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::Count()
- {
- return iList.Count();
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::GetAttributeL
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::GetAttributeL( TInt aIndex, TInt aAttr, TDes& aValue )
- {
- aValue = KNullDesC;
-
- if ( !iSession )
- {
- return;
- }
-
- if ( aIndex == KErrNotFound )
- {
- return;
- }
-
- TInt count = iList.Count();
- if ( aIndex < 0 || aIndex >= count )
- {
- return;
- }
-
- if ( aAttr == CMediaFileHandler::EAttrFullName )
- {
- CSearchListItem* item = iList[aIndex];
- if ( item->iStorageType == CMediaFileHandler::ERomStorage )
- {
- if ( item->iMediaType == CMediaFileHandler::EMediaTypeTone )
- {
- TPtrC name = iRomFileList->Item( item->iId , 0 );
- TMFDialogUtil::StrCopy( aValue, name );
- }
-
- if ( item->iMediaType == CMediaFileHandler::EMediaTypeVideo )
- {
- TPtrC name = iRomFileList->Item( item->iId , 1 );
- TMFDialogUtil::StrCopy( aValue, name );
- }
- }
- else
- {
- CMdEObject* object = iSession->GetFullObjectL( item->iId );
- CleanupStack::PushL( object );
- TMFDialogUtil::StrCopy( aValue, object->Uri() );
- CleanupStack::PopAndDestroy( object );
- }
- }
-
- else if ( aAttr == CMediaFileHandler::EAttrSongName ||
- aAttr == CMediaFileHandler::EAttrFileName )
- {
- CSearchListItem* item = iList[aIndex];
- TMFDialogUtil::StrCopy( aValue, item->Title() );
- if ( aValue.Length() == 0 )
- {
- if ( item->iStorageType == CMediaFileHandler::ERomStorage )
- {
- if ( item->iMediaType == CMediaFileHandler::EMediaTypeTone )
- {
- TPtrC name = iRomFileList->Item( aIndex,0 );
- TMFDialogUtil::StrCopy( aValue, name );
- }
-
- if ( item->iMediaType == CMediaFileHandler::EMediaTypeVideo )
- {
- TPtrC name = iRomFileList->Item( aIndex,1 );
- TMFDialogUtil::StrCopy( aValue, name );
- }
- }
- else
- {
- CMdEObject* object = iSession->GetFullObjectL( item->iId );
- CleanupStack::PushL( object );
- TParsePtrC parse( object->Uri() );
- TMFDialogUtil::StrCopy( aValue, parse.Name() );
- CleanupStack::PopAndDestroy( object );
- }
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::Attribute
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::Attribute( TInt aIndex, TInt aAttr )
- {
- if ( aIndex == KErrNotFound )
- {
- return KErrNotFound;
- }
-
- TInt count = iList.Count();
- if ( aIndex < 0 || aIndex >= count )
- {
- return KErrNotFound;
- }
-
-
- TInt ret = KErrNotFound;
- if ( aAttr == CMediaFileHandler::EAttrMediaType )
- {
- CSearchListItem* item = iList[aIndex];
- ret = item->iMediaType;
- }
-
- else if ( aAttr == CMediaFileHandler::EAttrStorageType )
- {
- CSearchListItem* item = iList[aIndex];
- ret = item->iStorageType;
- }
- else if ( aAttr == CMediaFileHandler::EAttrMediaFileId )
- {
- CSearchListItem* item = iList[aIndex];
- ret = item->iId;
- }
-
- return ret;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::Compare
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::Compare( const CSearchListItem& aFirst,
- const CSearchListItem& aSecond )
- {
- TPtrC first = aFirst.Title();
- TPtrC second = aSecond.Title();
-
- return first.Compare( second );
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::Panic
-//
-// -----------------------------------------------------------------------------
-//
-void CSearchList::Panic( TInt aReason )
- {
- TMFDialogUtil::Panic( aReason );
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::TextL
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC& CSearchList::TextL( CMdEObject& aObject, TInt aId )
- {
- CMdEPropertyDef& propDef =
- CMediaFileHandler::PropertyDefL( iSession, aId );
-
- CMdEProperty* property = NULL;
- TInt err = aObject.Property( propDef, property, 0 );
-
- if ( err != KErrNotFound && property )
- {
- return property->TextValueL();
- }
-
- return KNullDesC;
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::ItemIndex
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::ItemIndex( TInt aId )
- {
- TInt count = iList.Count();
-
- for ( TInt i=0; i<count; i++ )
- {
- CSearchListItem* item = iList[i];
- if ( item->iId == aId )
- {
- return i;
- }
- }
-
- return KErrNotFound;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::ItemIndex
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::ItemIndex( const TDesC& aText )
- {
- TInt count = iList.Count();
-
- for ( TInt i=0; i<count; i++ )
- {
- CSearchListItem* item = iList[i];
- if ( aText.CompareF( item->Title() ) == 0 )
- {
- return i;
- }
- }
-
-
-
- return KErrNotFound;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::ItemIndex
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::ItemIndex( TInt aId, TInt aIndex )
- {
- TInt count = iList.Count();
- if ( aIndex >= 0 && aIndex < count )
- {
- CSearchListItem* item = iList[aIndex];
- if ( item->iId == aId )
- {
- return aIndex;
- }
- }
-
- return ItemIndex( aId );
- }
-
-
-// -----------------------------------------------------------------------------
-// CSearchList::ItemIndex
-//
-// -----------------------------------------------------------------------------
-//
-TInt CSearchList::ItemIndex( const TDesC& aText, TInt aIndex )
- {
- TInt count = iList.Count();
- if ( aIndex >= 0 && aIndex < count )
- {
- CSearchListItem* item = iList[aIndex];
- if ( aText.CompareF( item->Title() ) == 0 )
- {
- return aIndex;
- }
- }
-
- return ItemIndex( aText );
- }
-
-
-/******************************************************************************
- * class CArtistQuery
- ******************************************************************************/
-
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CArtistQuery* CArtistQuery::NewL()
- {
- CArtistQuery* self = new (ELeave) CArtistQuery();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CArtistQuery::~CArtistQuery()
- {
- delete iArtist;
- delete iAlbum;
- delete iQuery;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::CArtistQuery
-//
-// -----------------------------------------------------------------------------
-//
-CArtistQuery::CArtistQuery()
- {
- iQueryType = KErrNotFound;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CArtistQuery::ConstructL()
- {
- iArtist = HBufC::NewL( 0 );
- iAlbum = HBufC::NewL( 0 );
- }
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::SetQueryType
-//
-// -----------------------------------------------------------------------------
-//
-void CArtistQuery::SetQueryType( TInt aType )
- {
- iQueryType = aType;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::QueryType
-//
-// -----------------------------------------------------------------------------
-//
-TInt CArtistQuery::QueryType()
- {
- return iQueryType;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::SetQuery
-//
-// -----------------------------------------------------------------------------
-//
-void CArtistQuery::SetQuery( CMdEObjectQuery* aQuery )
- {
- delete iQuery;
- iQuery = NULL;
- iQuery = aQuery;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::Query
-//
-// -----------------------------------------------------------------------------
-//
-CMdEObjectQuery* CArtistQuery::Query()
- {
- return iQuery;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::Artist
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC& CArtistQuery::Artist()
- {
- return *iArtist;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::Album
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC& CArtistQuery::Album()
- {
- return *iAlbum;
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::SetAlbumL
-//
-// -----------------------------------------------------------------------------
-//
-void CArtistQuery::SetAlbumL( const TDesC& aText )
- {
- delete iAlbum;
- iAlbum = NULL;
- iAlbum = aText.AllocL();
- }
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::SetArtistL
-//
-// -----------------------------------------------------------------------------
-//
-void CArtistQuery::SetArtistL( const TDesC& aText )
- {
- delete iArtist;
- iArtist = NULL;
- iArtist = aText.AllocL();
- }
-
-
-// -----------------------------------------------------------------------------
-// CArtistQuery::ResetL
-//
-// -----------------------------------------------------------------------------
-//
-void CArtistQuery::ResetL()
- {
- iQueryType = KErrNotFound;
-
- delete iArtist;
- iArtist = NULL;
-
- delete iAlbum;
- iAlbum = NULL;
-
- delete iQuery;
- iQuery = NULL;
-
- iArtist = HBufC::NewL( 0 );
- iAlbum = HBufC::NewL( 0 );
- }
-
-
-// End of File