diff -r 8ee96d21d9bf -r 7e0eff37aedb profilesservices/MediaFileList/Src/mediafiletest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesservices/MediaFileList/Src/mediafiletest.cpp Wed Sep 01 12:20:44 2010 +0100 @@ -0,0 +1,2489 @@ +/* +* 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: Class create for testing. +* +*/ + + + + +// INCLUDE FILES + +#include "mediafiletest.h" +#include "mediafiledialog.h" +#include "mediafilepreview.h" +#include "mediafilelistdebug.h" + +#include + +#include // for macro iAvkonAppUi +#include // for CEikCaptionedControl +#include // Math::FRand + +#include // bafl.lib +#include // RFileReadStream + + + +#ifdef _DEBUG +/****************************************************************************** + * class CMFDialogTest + ******************************************************************************/ + + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::NewL +// +// ----------------------------------------------------------------------------- +CMFDialogTest* CMFDialogTest::NewL( CMediaFileDialog* aDialog ) + { + CMFDialogTest* self = new (ELeave) CMFDialogTest( aDialog ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::CMFDialogTest +// +// ----------------------------------------------------------------------------- +// +CMFDialogTest::CMFDialogTest( CMediaFileDialog* aDialog ) + { + iDlg = aDialog; + + iTestCounter = 0; + iBottomVisited = EFalse; + iDestroyedPtr = NULL; + } + + +// ---------------------------------------------------------------------------- +// Destructor +// +// ---------------------------------------------------------------------------- +// +CMFDialogTest::~CMFDialogTest() + { + SetScreenSaverPeriod( iScreenSaverPeriod ); + + delete iTestCaller; + delete iRandomNum; + + if ( iPopupNote ) + { + iPopupNote->HideInfoPopupNote(); + delete iPopupNote; + } + + if ( iDestroyedPtr ) + { + *iDestroyedPtr = ETrue; + iDestroyedPtr = NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::ConstructL() + { + const TInt KLongPeriod = 60*60*24; // 24 h in seconds + + iTestCaller = CMFActiveCaller::NewL( this ); + iRandomNum = CRandomNum::NewL(); + + iScreenSaverPeriod = ScreenSaverPeriodL(); + SetScreenSaverPeriod( KLongPeriod ); + + iPopupNote = CAknInfoPopupNoteController::NewL(); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::TestL +// +// ----------------------------------------------------------------------------- +// +TBool CMFDialogTest::TestL( TInt /*aAttr*/ ) + { + TInt index = 0; + CDesCArray *arr = new(ELeave) CDesCArrayFlat( 1 ); + CleanupStack::PushL( arr ); + + arr->AppendL(_L("random play")); + arr->AppendL(_L("test 1")); + arr->AppendL(_L("test 2")); + + if ( !TMFDialogUtil::ShowListQueryL( _L("huu"), arr, &index ) ) + { + CleanupStack::PopAndDestroy( arr ); + return EFalse; + } + if ( index == 0 ) + { + NextListItemL(); + } + else if ( index == 1 ) + { + Test1L( 0 ); + } + else if ( index == 2 ) + { + Test2L( 0 ); + } + else + { + } + + CleanupStack::PopAndDestroy( arr ); + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::Test1L +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::Test1L( TInt /*aAttr*/ ) + { + } + + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::Test2L +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::Test2L( TInt /*aAttr*/ ) + { + TInt num10 = 0; TInt num11 = 0; TInt num12 = 0; + TInt num13 = 0; TInt num14 = 0; TInt num15 = 0; + TInt num16 = 0; TInt num17 = 0; TInt num18 = 0; + TInt num19 = 0; TInt num20 = 0; TInt numOther = 0; + + for (TInt i=0; i<100000; i++) + { + TInt num = iRandomNum->Random( 10, 20 ); + + if ( num == 10 ) + { + num10++; + } + else if ( num == 11 ) + { + num11++; + } + else if ( num == 12 ) + { + num12++; + } + else if ( num == 13 ) + { + num13++; + } + else if ( num == 14 ) + { + num14++; + } + else if ( num == 15 ) + { + num15++; + } + else if ( num == 16 ) + { + num16++; + } + else if ( num == 17 ) + { + num17++; + } + else if ( num == 18 ) + { + num18++; + } + else if ( num == 19 ) + { + num19++; + } + else if ( num == 20 ) + { + num20++; + } + else + { + numOther++; + } + + } + + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::NextFolderL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::NextFolderL() + { + const TInt KDelay = 2000; + + TBool destroyed = EFalse; + iDestroyedPtr = &destroyed; // updated in this class destructor + + TInt currentFolder = iDlg->iState->CurrentFolder(); + TInt currentIndex = iDlg->CurrentItemListIndex(); + TInt folderId = iDlg->iState->FolderId( currentIndex ); + + if ( currentFolder == EEFolderRoot ) + { + // root folder + iBottomVisited = EFalse; + if ( iRandomNum->Match( 30 ) ) + { + SimulateSearchEventL(); // search + } + else if ( folderId == EEFolderMusic || folderId == EEFolderTones || + folderId == EEFolderRecordings || folderId == EEFolderVideos ) + { + SimulateOpenEventL(); // go down + } + else + { + iTestCaller->Start( ENextListItem, KDelay ); + } + } + else if ( currentIndex == KErrNotFound ) + { + // empty folder + SimulateBackEventL(); // go up + } + else if ( folderId == KErrNotFound ) + { + // this folder has files, not subfolders + iBottomVisited = ETrue; + if ( iRandomNum->Match( 50 ) ) + { + // stay in this folder and select a file + iTestCaller->Start( ENextListItem, KDelay ); + return; + } + else + { + SimulateBackEventL(); // go up + } + } + else // this folder has subfolders + { + TInt num = 15; + if ( !iBottomVisited ) + { + num = 85; + } + + if ( iRandomNum->Match( num ) ) + { + SimulateOpenEventL(); // go down + } + else + { + SimulateBackEventL(); // go up + } + } + + // select listbox item after delay + if ( !destroyed ) + { + iDestroyedPtr = NULL; + iTestCaller->Start( ENextListItem, KDelay ); + } + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::NextListItemL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::NextListItemL() + { + const TInt KDelay = 250; + const TInt KLongDelay = 2000; + + TInt delay = KDelay; + + TInt currentIndex = iDlg->CurrentItemListIndex(); + TInt folderId = iDlg->iState->FolderId( currentIndex ); + + if ( folderId == KErrNotFound && currentIndex == 0 ) + { + // this folder contain files - make delay longer to + // allow first file preview + delay = KLongDelay; + } + + TInt itemCount = iDlg->iListBox->Model()->NumberOfItems(); + iNewIndex = iRandomNum->Random( itemCount - 1); + + if ( iDlg->iState->CurrentFolder() == EEFolderRoot ) + { + if ( iRandomNum->Match( 50 ) ) + { + iNewIndex = 2; // more chances to Music folder + } + } + + if ( iNewIndex == currentIndex ) + { + iTestCaller->Start( ENextFolder, delay ); + } + else + { + iTestCaller->Start( EMovePosition, delay ); + } + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::MovePositionL +// +// Scrolls listbox until selected item (iNewIndex) is found. +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::MovePositionL() + { + const TInt KMoveDelay = 150; + const TInt KThousand = 1000; + + TInt currentIndex = iDlg->CurrentItemListIndex(); + TInt folderId = iDlg->iState->FolderId( currentIndex ); + TInt itemCount = iDlg->iListBox->Model()->NumberOfItems(); + + TBool itemFound = EFalse; + if ( currentIndex == iNewIndex ) + { + itemFound = ETrue; // listbox has scrolled to new item + } + if ( currentIndex == KErrNotFound ) + { + itemFound = ETrue; // folder is empty + } + if ( iNewIndex >= itemCount ) + { + itemFound = ETrue; // wrong folder + } + + if ( itemFound ) + { + // next listbox selection found + + TInt delay = KMoveDelay; + if ( folderId == KErrNotFound ) + { + // selection is file - allow time for preview + delay = iRandomNum->Random( 3, 10 ); + delay = delay * KThousand; + } + iTestCaller->Start( ENextFolder, delay ); + return; + } + + // Simulate listbox item selection. + SimulateKeyEventL( EKeyUpArrow ); + + //FLOG( _L("CMediaFileDialog::MovePositionL '%d/%d'"), currentIndex, iNewIndex ); + + iTestCaller->Start( EMovePosition, KMoveDelay ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SimulateKeyEventL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SimulateKeyEventL( TInt aEvent ) + { + TKeyEvent key; + key.iModifiers = 0; + key.iRepeats = 0; + key.iCode = aEvent; + key.iScanCode = aEvent; + + //iListBox->SetCurrentItemIndexAndDraw( newIndex ); + CCoeEnv::Static()->SimulateKeyEventL( key, EEventKey ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SimulateOpenEventL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SimulateOpenEventL() + { + TKeyEvent keyEvent; + keyEvent.iCode = EKeyDevice3; + keyEvent.iScanCode = EStdKeyDevice3; + keyEvent.iRepeats = 0; + CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SimulateBackEventL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SimulateBackEventL() + { + TKeyEvent keyEvent; + keyEvent.iCode = EKeyDevice1; + keyEvent.iScanCode = EStdKeyDevice1; + keyEvent.iRepeats = 0; + CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SimulateSearchEventL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SimulateSearchEventL() + { + // letter a 97/65 + // letter b 98/66 + + TKeyEvent keyEvent; + keyEvent.iCode = 97; + keyEvent.iScanCode = 65; + keyEvent.iRepeats = 0; + CCoeEnv::Static()->SimulateKeyEventL( keyEvent, EEventKey ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SetScreenSaverPeriod +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SetScreenSaverPeriod( TInt aPeriod ) + { + TRAP_IGNORE( SetScreenSaverPeriodL( aPeriod ) ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SetScreenSaverPeriodL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SetScreenSaverPeriodL( TInt aPeriod ) + { + // from SettingsInternalCRKeys.h + const TUid KCRUidPersonalizationSettings = {0x101F877C}; + const TUint32 KSettingsScreenSaverPeriod = 0x00000008; + + CRepository* repository = + CRepository::NewL( KCRUidPersonalizationSettings ); + + // ignore error + repository->Set( KSettingsScreenSaverPeriod, aPeriod ); + + delete repository; + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::ScreenSaverPeriodL +// +// ----------------------------------------------------------------------------- +// +TInt CMFDialogTest::ScreenSaverPeriodL() + { + // from SettingsInternalCRKeys.h + const TUid KCRUidPersonalizationSettings = {0x101F877C}; + const TUint32 KSettingsScreenSaverPeriod = 0x00000008; + + CRepository* repository = + CRepository::NewL( KCRUidPersonalizationSettings ); + + TInt period = 60; // 60 seconds + // ignore error + repository->Get( KSettingsScreenSaverPeriod, period ); + + delete repository; + + return period; + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::HandleActiveCallL (from MMFActiveCallerObserver) +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::HandleActiveCallL( TInt aCallId ) + { + if ( aCallId == ENextFolder ) + { + //FLOG( _L("CMFDialogTest::HandleActiveCallL: ENextFolder") ); + + TRAP_IGNORE( NextFolderL() ); + iDestroyedPtr = NULL; + } + if ( aCallId == ENextListItem ) + { + //FLOG( _L("CMFDialogTest::HandleActiveCallL: ENextListItem") ); + NextListItemL(); + } + + if ( aCallId == EMovePosition ) + { + //FLOG( _L("CMFDialogTest::HandleActiveCallL: EMovePosition") ); + + MovePositionL(); + } + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::SetTime +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::SetTime() + { + iTime = TimeBefore(); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::PrintTimeL +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::PrintTimeL( const TDesC& aText ) + { + TBuf<128> buf; + TInt milliSeconds = TimeAfter( iTime ); + buf.Format( _L("%S %d ms"), &aText, milliSeconds ); + + ShowPopupNoteL( buf ); + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::TimeBefore +// +// Function returns TTime of the current time (needed with function TimeAfter). +// ----------------------------------------------------------------------------- +// +TTime CMFDialogTest::TimeBefore() + { + TTime now; + now.UniversalTime(); + return now; + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::TimeAfter +// +// Function returns milliseconds passed since aBefore. +// ----------------------------------------------------------------------------- +// +TInt64 CMFDialogTest::TimeAfter( TTime aBefore ) + { + TTime after; + after.UniversalTime(); + TTimeIntervalMicroSeconds microSeconds=after.MicroSecondsFrom( aBefore ); + TInt64 milliSeconds=microSeconds.Int64()/1000; + return milliSeconds; + } + + +// ----------------------------------------------------------------------------- +// CMFDialogTest::ShowPopupNote +// +// ----------------------------------------------------------------------------- +// +void CMFDialogTest::ShowPopupNoteL( const TDesC& aText ) + { + const TInt KPopupDisplayTime = 3*1000; + const TInt KPopupDelayTime = 500; + + iPopupNote->SetTextL( aText ); + iPopupNote->SetTimeDelayBeforeShow( KPopupDelayTime ); + iPopupNote->SetTimePopupInView( KPopupDisplayTime ); + iPopupNote->ShowInfoPopupNote(); + } + + + + +/****************************************************************************** + * class CRandomNum + ******************************************************************************/ + + + +// ----------------------------------------------------------------------------- +// CRandomNum::NewLC +// +// ----------------------------------------------------------------------------- +// +CRandomNum* CRandomNum::NewLC() + { + CRandomNum* randomdata = new (ELeave) CRandomNum; + CleanupStack::PushL( randomdata ); + return randomdata; + } + + +// ----------------------------------------------------------------------------- +// CRandomNum::NewL +// +// ----------------------------------------------------------------------------- +// +CRandomNum* CRandomNum::NewL() + { + CRandomNum* randomdata = new (ELeave) CRandomNum; + return randomdata; + } + +// ----------------------------------------------------------------------------- +// CRandomNum::CRandomNum +// +// ----------------------------------------------------------------------------- +// +CRandomNum::CRandomNum() + { + TTime now; + now.UniversalTime(); + iSeed = now.Int64(); + } + +// ----------------------------------------------------------------------------- +// CRandomNum::~CRandomNum +// +// ----------------------------------------------------------------------------- +// +CRandomNum::~CRandomNum() + { + } + + +// ----------------------------------------------------------------------------- +// CRandomNum::Random +// +// Return random integer from 0 to aMax (including 0 and aMax). +// ----------------------------------------------------------------------------- +// +TInt CRandomNum::Random( TInt aMax ) + { + TReal real = Math::FRand( iSeed ); // FRand updates iSeed + TReal real2 = real * ( aMax+1 ); + TInt num = (TInt) real2; + return num; + } + + +// ----------------------------------------------------------------------------- +// CRandomNum::Random +// +// Return random integer from aMin to aMax (including aMin and aMax). +// ----------------------------------------------------------------------------- +// +TInt CRandomNum::Random( TInt aMin, TInt aMax ) + { + if ( aMin >= aMax ) + { + return aMin; + } + + TInt range = aMax - aMin; + + TInt num = Random( range ); + + return aMin + num; + } + + +// ----------------------------------------------------------------------------- +// CRandomNum::Match +// +// Return ETrue according to percentage parameter (eg. in case +// aPercentage is 10 Match returns ETrue in 10% of the calls). +// ----------------------------------------------------------------------------- +// +TBool CRandomNum::Match( TInt aPercentage ) + { + if ( aPercentage < 1 ) + { + return EFalse; + } + + TInt num = Random( 99 ); // 0..99 + num++; // 1..100 + + if ( num <= aPercentage ) + { + return ETrue; + } + + return EFalse; + } + + + + + + +/****************************************************************************** + * class CMediaFileDialog3 + ******************************************************************************/ + +/* + +// ----------------------------------------------------------------------------- +// media file dialog resource (test code). +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_media_file_dialog_3 + { + //flags = EEikDialogFlagNoBackup | EEikDialogFlagFillAppClientRect; + flags=EEikDialogFlagWait | EEikDialogFlagFillAppClientRect | EEikDialogFlagNotifyEsc; + //buttons = R_AVKON_SOFTKEYS_OK_BACK__OK; + buttons = r_media_file_dialog_3_cba; + + items= + { + DLG_LINE + { + type=EAknCtSingleGraphicListBox; + itemflags=EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys; + id=1; + control=LISTBOX + { + flags = EAknListBoxSelectionList; + }; + } + }; + + } + + +//------------------------------------------------------------------------------ +// Softkey resource +//------------------------------------------------------------------------------ +// +RESOURCE CBA r_media_file_dialog_3_cba + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EAknSoftkeyBack; + txt = text_softkey_back; + }, + CBA_BUTTON + { + id = EAknSoftkeySelect; + txt = qtn_msk_select; + } + }; + } + +RESOURCE MENU_BAR r_media_file_dialog_3_menu + { + titles= + { + MENU_TITLE + { + menu_pane=r_media_file_dialog_3_menu_pane; + } + }; + } + +RESOURCE MENU_PANE r_media_file_dialog_3_menu_pane + { + items= + { + MENU_ITEM { command=EAknCmdOpen; txt=qtn_options_open; }, + MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; }, + MENU_ITEM { command=EAknCmdExit; txt=qtn_options_exit; } + }; + } +*/ +/* + +// ----------------------------------------------------------------------------- +// CMediaFileDialog3::ShowDialogL +// +// ----------------------------------------------------------------------------- +TBool CMediaFileDialog3::ShowDialogL() + { + CMediaFileDialog3* dlg = CMediaFileDialog3::NewL(); + TBool ret = dlg->ExecuteLD( R_MEDIA_FILE_DIALOG_3 ); + + return ret; + } + +// ---------------------------------------------------------------------------- +// Destructor +// +// ---------------------------------------------------------------------------- +// +CMediaFileDialog3::~CMediaFileDialog3() + { + delete iVideoPreviewHandler; + + if ( iAvkonAppUi ) + { + iAvkonAppUi->RemoveFromStack( this ); + } + } + + +// ----------------------------------------------------------------------------- +// CMediaFileDialog3::CMediaFileDialog3 +// +// ----------------------------------------------------------------------------- +// +CMediaFileDialog3::CMediaFileDialog3() + { + } + + +// ----------------------------------------------------------------------------- +// CMediaFileDialog3::NewL +// +// ----------------------------------------------------------------------------- +CMediaFileDialog3* CMediaFileDialog3::NewL() + { + CMediaFileDialog3* self = new (ELeave) CMediaFileDialog3(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMediaFileDialog3::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CMediaFileDialog3::ConstructL() + { + FLOG( _L("CMediaFileDialog3::ConstructL START") ); + + CAknDialog::ConstructL( R_MEDIA_FILE_DIALOG_3_MENU ); + + iVideoPreviewHandler = CMFVideoPreviewHandler::NewL(); + + FLOG( _L("CMediaFileDialog3::ConstructL END") ); + } + +// ----------------------------------------------------------------------------- +// CMediaFileDialog3::PreLayoutDynInitL +// +// ----------------------------------------------------------------------------- +// +void CMediaFileDialog3::PreLayoutDynInitL() + { + } + +//------------------------------------------------------------------------------ +// CMediaFileDialog3::OkToExitL +// +//------------------------------------------------------------------------------ +// +TBool CMediaFileDialog3::OkToExitL(TInt aButtonId) + { + if ( aButtonId == EAknSoftkeyBack ) + { + } + + return CAknDialog::OkToExitL( aButtonId ); + } + + + +//------------------------------------------------------------------------------ +// CMediaFileDialog3::ProcessCommandL +// +// Handle commands from menu. +//------------------------------------------------------------------------------ +// +void CMediaFileDialog3::ProcessCommandL(TInt aCommandId) + { + HideMenu(); + + + switch (aCommandId) + { + case EAknCmdHelp: + { + break; + } + + case EAknCmdOpen: + { + CEikCaptionedControl *ctrl = Line( 1 ); // dialog has one line (listbox) with id 1 + iVideoPreviewHandler->SetAttrL( TMFDialogUtil::EAttrDrawingWindow, (ctrl->iControl->DrawableWindow()) ); + + iVideoPreviewHandler->SetAttrL( TMFDialogUtil::EAttrFileName, _L("C:\\Data\\Videos\\video2.mp4") ); + iVideoPreviewHandler->PlayL(); + + break; + } + + case EAknCmdExit: + case EEikCmdExit: + { + // close dialog and exit calling application + iAvkonAppUi->ProcessCommandL( EAknCmdExit ); + break; + } + + default: + break; + } + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::QueryAllL (obsolete) +// +// Finds all tones, music, videos or recordings. +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::QueryAllL( TInt aAttr ) + { + if ( !iSessionOpen ) + { + User::Leave( KErrDisconnected ); + } + + if ( aAttr != EAttrMusic && aAttr != EAttrVideo ) + { + User::Leave( KErrNotSupported ); + } + + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + CMdEObjectDef& musicObjectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject ); + CMdEObjectDef& videoObjectDef = defNS.GetObjectDefL( MdeConstants::Video::KVideoObject ); + + delete iQuery; + iQuery = NULL; + + if ( aAttr == EAttrVideo ) + { + iQuery = iSession->NewObjectQueryL( defNS, videoObjectDef, this ); + iQueryType = EQueryVideo; + } + else + { + iQuery = iSession->NewObjectQueryL( defNS, musicObjectDef, this ); + iQueryType = EQueryAudio; + } + + + // set attributes that are included in query result + CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName ); + iQuery->AddPropertyFilterL( &namePropertyDef ); + + // define sort order + iQuery->AppendOrderRuleL( TMdEOrderRule( namePropertyDef, ESortAscending ) ); + + iQuery->SetResultMode( EQueryResultModeItem ); + + iQuery->FindL(); + + iQueryType = EQueryAudio; + } +*/ + + + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::QueryArtistUnknownL (obsolete) +// +// Finds all songs for aArtist that miss album property. +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::QueryArtistUnknownL( const TDesC& aArtist ) + { + if ( !iSessionOpen ) + { + return; + } + + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject ); + + iQueryType = EQueryAudio; + + delete iQuery; + iQuery = NULL; + iQuery = iSession->NewObjectQueryL( defNS, objectDef, this ); + + iQuery->SetResultMode( EQueryResultModeItem ); + + CMdEPropertyDef& artistPropertyDef = PropertyDefL( EAttrArtist ); + CMdEPropertyDef& namePropertyDef = PropertyDefL( EAttrSongName ); + CMdEPropertyDef& albumPropertyDef = PropertyDefL( EAttrAlbum ); + + + CMdELogicCondition& conditions = iQuery->Conditions(); + + // add root condition: get all songs by aArtist + conditions.AddPropertyConditionL( artistPropertyDef, + ETextPropertyConditionCompareEquals, + aArtist ); + + // set attributes that are included in query result + iQuery->AppendOrderRuleL( TMdEOrderRule( namePropertyDef, ESortAscending ) ); + iQuery->AddPropertyFilterL( &namePropertyDef ); + iQuery->AddPropertyFilterL( &artistPropertyDef ); + + + // add other condition: get songs that do not have album attribute + CMdELogicCondition& albumCondition = + conditions.AddLogicConditionL( ELogicConditionOperatorAnd ); + albumCondition.AddPropertyConditionL( albumPropertyDef ); + albumCondition.SetNegate( ETrue ); + + iQuery->FindL(); + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler2::QueryAlbumsL (obsolete) +// +// Finds all albums for aArtist. +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::QueryAlbumsL( const TDesC& aArtist ) + { + if ( !iSessionOpen ) + { + return; + } + + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject ); + + iQueryType = EQueryAudio; + + delete iQuery; + iQuery = NULL; + iQuery = iSession->NewObjectQueryL( defNS, objectDef, this ); + + iQuery->SetResultMode( EQueryResultModeDistinctValues ); + + CMdEPropertyDef& propertyDef = PropertyDefL( EAttrAlbum ); + + // distinct query requires exactly one property filter + CMdELogicCondition& conditions = iQuery->Conditions(); + conditions.AddPropertyConditionL( propertyDef ); + iQuery->AppendOrderRuleL( TMdEOrderRule( propertyDef, ESortAscending ) ); + iQuery->AddPropertyFilterL( &propertyDef ); + + CMdEPropertyDef& propertyDef2 = PropertyDefL( EAttrArtist ); + conditions.AddPropertyConditionL( propertyDef2, + ETextPropertyConditionCompareEquals, aArtist ); + + iQuery->FindL(); + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::QueryArtistAlbumL (obsolete) +// +// Finds songs for aArtist/aAlbum. +// ----------------------------------------------------------------------------- +// + +/* +void CMediaFileHandler::QueryArtistAlbumL( const TDesC& aArtist, const TDesC& aAlbum ) + { + if ( !iSessionOpen ) + { + return; + } + + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject ); + + iQueryType = EQueryAudio; + + delete iQuery; + iQuery = NULL; + iQuery = iSession->NewObjectQueryL( defNS, objectDef, this ); + + iQuery->SetResultMode( EQueryResultModeItem ); + + CMdEPropertyDef& artistDef = PropertyDefL( EAttrArtist ); + CMdEPropertyDef& albumDef = PropertyDefL( EAttrAlbum ); + CMdEPropertyDef& nameDef = PropertyDefL( EAttrSongName ); + + CMdELogicCondition& conditions = iQuery->Conditions(); + + conditions.AddPropertyConditionL( artistDef, + ETextPropertyConditionCompareEquals, aArtist ); + + conditions.AddPropertyConditionL( albumDef, + ETextPropertyConditionCompareEquals, aAlbum ); + + iQuery->AppendOrderRuleL( TMdEOrderRule( nameDef, ESortAscending ) ); + iQuery->AddPropertyFilterL( &nameDef ); + + + User::Leave(KErrNoMemory); + iQuery->FindL(); + + + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::QueryL (test code) +// +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::QueryL( TInt aAttr ) + { + if ( aAttr != EAttrArtist && aAttr != EAttrAlbum && + aAttr != EAttrGenre && aAttr != EAttrComposer ) + { + User::Leave( KErrNotSupported ); + } + + + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject ); + iQuery = iSession->NewObjectQueryL( defNS, objectDef, this ); + + + RArray itemIds; + itemIds.Append( 22 ); + itemIds.Append( 5 ); + itemIds.Append( 18 ); + //itemLogicCondition->AddObjectConditionL(itemIds); + + CMdELogicCondition& conditions = iQuery->Conditions(); + conditions.AddObjectConditionL( itemIds ); + iQuery->SetResultMode( EQueryResultModeItem ); + + itemIds.Close(); + + iQuery->FindL(); + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::QueryL (test code) +// +// ----------------------------------------------------------------------------- +// + +/* +void CMediaFileHandler::QueryL() + { + if ( !iSession ) + { + User::Leave( KErrSessionClosed ); + } + + delete iQuery; + iQuery = NULL; + + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + + CMdEObjectDef& objectDef = defNS.GetObjectDefL( MdeConstants::Audio::KAudioObject ); + iQuery = iSession->NewObjectQueryL( defNS, objectDef, this ); + iQuery->SetResultMode( EQueryResultModeId ); + iQuery->FindL(); + + + CMdELogicCondition& conditions = iQuery->Conditions(); + + //conditions.AddPropertyConditionL(composerPropertyDef, + //CMdETextPropertyCondition::ECompareEquals, text); + + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::HandleQueryCompletedOneL +// +// ----------------------------------------------------------------------------- +// + +/* +void CMediaFileHandler::HandleQueryCompletedOneL( CMdEQuery& aQuery, + TInt aError ) + { + CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL(); + + CMdEObjectDef& objectDef = defNS.GetObjectDefL( + MdeConstants::Object::KBaseObject ); + CMdEObjectDef& mediaObjectDef = defNS.GetObjectDefL( + MdeConstants::MediaObject::KMediaObject ); + CMdEObjectDef& audioObjectDef = defNS.GetObjectDefL( + MdeConstants::Audio::KAudioObject ); + + + CMdEPropertyDef& songPropertyDef = objectDef.GetPropertyDefL( + MdeConstants::Object::KTitleProperty ); + CMdEPropertyDef& artistPropertyDef = mediaObjectDef.GetPropertyDefL( + MdeConstants::MediaObject::KArtistProperty ); + CMdEPropertyDef& albumPropertyDef = audioObjectDef.GetPropertyDefL( + MdeConstants::Audio::KAlbumProperty ); + CMdEPropertyDef& genrePropertyDef = mediaObjectDef.GetPropertyDefL( + MdeConstants::MediaObject::KGenreProperty ); + + CMdEProperty* property = NULL; + + const RArray& arr = iQuery->ResultIds(); + + TBuf<256> buf; + TInt count = arr.Count(); + for ( TInt i=0; iGetFullObjectL( id ); + CleanupStack::PushL( object ); + + buf = object->Uri(); + TInt propertyCount = object->PropertyCount(); + for ( TInt j=0; jPropertyL( j ); + const CMdEPropertyDef& prDef = pr.Def(); + buf.Append(_L(" ")); + buf.Append(prDef.Name()); + } + TMFDialogUtil::ShowInformationQueryL( buf ); + + CMdEPropertyDef& tmpDef = object->Def().GetPropertyDefL( MdeConstants::MediaObject::KArtistProperty ); + TInt ret = object->Property( tmpDef, property, 0 ); + if ( ret != KErrNotFound ) + { + buf = property->TextValueL(); + } + + + ret = object->Property( songPropertyDef, property, 0 ); + if ( ret != KErrNotFound ) + { + buf = property->TextValueL(); + } + + ret = object->Property( artistPropertyDef, property, 0 ); + if ( ret != KErrNotFound ) + { + buf = property->TextValueL(); + } + + ret = object->Property( albumPropertyDef, property, 0 ); + if ( ret != KErrNotFound ) + { + buf = property->TextValueL(); + } + + ret = object->Property( genrePropertyDef, property, 0 ); + if ( ret != KErrNotFound ) + { + buf = property->TextValueL(); + } + + + CleanupStack::PopAndDestroy( object ); + } + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::HandleQueryCompletedTwoL +// +// ----------------------------------------------------------------------------- +// + +/* +void CMediaFileHandler::HandleQueryCompletedTwoL( CMdEQuery& aQuery, + TInt aError ) + { + TBuf<256> buf; + + TInt count = iQuery->Count(); + for ( TInt i=0; iResultDistinctValue( i ); + + CMdEObject& object = iQuery->Result( i ); + + buf = object.Uri(); + TInt propertyCount = object.PropertyCount(); + for ( TInt j=0; jTextValueL(); + } + } + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::ResultCount +// +// ----------------------------------------------------------------------------- +// + +/* +TInt CMediaFileHandler::ResultCount() + { + if ( iQueryType == EQueryRomFile ) + { + return iRomFileList.Count(); + } + + if ( iQueryType == ESearchVideo ) + { + return iSearchList->Count(); + } + + if ( !iQuery || !iQueryReady || !iSessionOpen ) + { + return 0; + } + + TInt count = 0; + TQueryResultMode resultMode = iQuery->ResultMode(); + + if ( resultMode == EQueryResultModeDistinctValues || + resultMode == EQueryResultModeItem || + resultMode == EQueryResultModeCount ) + { + count = iQuery->Count(); + } + else if ( resultMode == EQueryResultModeId ) + { + count = iQuery->Count(); + const RArray& arr = iQuery->ResultIds(); + count = arr.Count(); + } + + return count; + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::GetRecentFileAttribute +// +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::GetRecentFileAttribute( TInt aIndex, TInt aAttr, TDes& aValue ) + { + TInt count = iRecentList->Count(); + + __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) ); + + if ( aAttr == EAttrFullName ) + { + StrCopy( aValue, iRecentList->FileName( aIndex ) ); + } + else if ( aAttr == EAttrSongName || aAttr == EAttrFileName ) + { + TParsePtrC parse( iRecentList->FileName( aIndex ) ); + StrCopy( aValue, parse.Name() ); + } + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::RecentFileAttribute +// +// ----------------------------------------------------------------------------- +// +/* +TInt CMediaFileHandler::RecentFileAttribute( TInt aIndex, TInt aAttr ) + { + TInt count = iRecentList->Count(); + __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) ); + + TInt ret = KErrNotFound; + + if ( aAttr == EAttrMediaType ) + { + ret = EAttrMusic; + } + if ( aAttr == EAttrStorageType ) + { + ret = EPhoneMemory; + } + + return ret; + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::Attribute +// +// ----------------------------------------------------------------------------- +// +/* +TInt CMediaFileHandler::Attribute( TInt aIndex, TInt aAttr ) + { + if ( iQueryType == EQueryRomFile ) + { + return RomFileAttribute( aIndex, aAttr ); + } + if ( iQueryType == ESearchVideo ) + { + return iSearchList->Attribute( aIndex, aAttr ); + } + + if ( aAttr == EAttrMediaType ) + { + if ( iQueryType == EQueryVideo ) + { + return EAttrVideo; + } + else + { + return EAttrMusic; + } + } + else if ( aAttr == EAttrStorageType ) + { + TInt ret = CMediaFileHandler::EPhoneMemory; + + if ( !iQuery || !iQueryReady || !iSessionOpen ) + { + return ret; + } + TQueryResultMode resultMode = iQuery->ResultMode(); + if ( resultMode != EQueryResultModeItem ) + { + return ret; + } + + CMdEObject& object = iQuery->Result( aIndex ); + if ( iDriveUtil->IsMemoryCard( object.Uri() ) ) + { + ret = CMediaFileHandler::EMemoryCard; + } + else if ( iDriveUtil->IsMassStorage( object.Uri() ) ) + { + ret = CMediaFileHandler::EMassStorage; + } + return ret; + } + + else if ( aAttr == EAttrMediaFileId ) + { + if ( !iQuery || !iQueryReady || !iSessionOpen ) + { + return KErrNotFound; + } + CMdEObject& object = iQuery->Result( aIndex ); + return object.Id(); + } + + return KErrNotFound; + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::GetAttributeL +// +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::GetAttributeL( TInt aIndex, TInt aAttr, TDes& aValue ) + { + aValue = KNullDesC; + + if ( iQueryType == EQueryRomFile ) + { + GetRomFileAttribute( aIndex, aAttr, aValue ); + return; + } + if ( iQueryType == ESearchVideo ) + { + if ( iSessionOpen ) + { + iSearchList->SetSession( iSession ); + } + else + { + iSearchList->SetSession( NULL ); + } + iSearchList->GetAttributeL( aIndex, aAttr, aValue ); + return; + } + + + if ( !iQuery || !iQueryReady || !iSessionOpen ) + { + return; + } + + TInt count = ResultCount(); + __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) ); + + TQueryResultMode resultMode = iQuery->ResultMode(); + + if ( resultMode == EQueryResultModeDistinctValues ) + { + TPtrC ptr = iQuery->ResultDistinctValue( aIndex ); + StrCopy( aValue, ptr ); + } + + if ( resultMode == EQueryResultModeItem ) + { + CMdEObject& object = iQuery->Result( aIndex ); + + if ( aAttr == EAttrFullName ) + { + StrCopy( aValue, object.Uri() ); + return; + } + + CMdEPropertyDef& propDef = PropertyDefL( aAttr ); + CMdEProperty* property = NULL; + TInt ret = object.Property( propDef, property, 0 ); + if ( ret != KErrNotFound ) + { + StrCopy( aValue, property->TextValueL() ); + } + else if ( aAttr == EAttrSongName || aAttr == EAttrFileName) + { + TParsePtrC parse( object.Uri() ); + StrCopy( aValue, parse.Name() ); + } + } + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::UpdateRecentListL +// +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::UpdateRecentListL() + { + if ( !iSessionOpen ) + { + return; + } + + TInt count = iRecentList->Count(); + + for ( TInt i=0; iId( i ); + CMdEObject* object = NULL; + + TInt err = KErrNone; + TRAP( err, object = iSession->GetFullObjectL( id ) ); + if ( err != KErrNone || !object ) + { + iRecentList->SetPresent( EFalse, i ); + } + else + { + CleanupStack::PushL( object ); + iRecentList->SetFileNameL( object->Uri(), i ); + CleanupStack::PopAndDestroy( object ); + } + } + + iRecentList->Clean(); + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::StoreRecentFileL +// +// ----------------------------------------------------------------------------- +// +/* +void CMediaFileHandler::StoreRecentFileL( TInt aIndex ) + { + if ( iQueryType == EQueryRomFile ) + { + return; // tones not part of recent files + } + + if ( iQueryType == EQueryRecentFile ) + { + TInt64 id = iRecentList->Id( aIndex ); + iRecentList->AddItemL( id ); + return; + } + + if ( !iQuery || !iQueryReady || !iSessionOpen ) + { + return; + } + + TQueryResultMode resultMode = iQuery->ResultMode(); + if ( resultMode == EQueryResultModeItem ) + { + CMdEObject& object = iQuery->Result( aIndex ); + TItemId id = object.Id(); + iRecentList->AddItemL( id ); + } + } +*/ + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::HandleQueryCompletedL +// +// ----------------------------------------------------------------------------- +// + +/* +void CMediaFileHandler::HandleQueryCompletedL( CMdEQuery& aQuery, TInt aError ) + { + iQueryReady = ETrue; + + if ( !iQuery ) + { + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, KErrCancel ); + return; // query has been canceled + } + + if ( aError != KErrNone ) + { + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, aError ); + return; + } + + TQueryResultMode resultMode = iQuery->ResultMode(); + + if ( resultMode == EQueryResultModeDistinctValues ) + { + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EQueryComplete, aError ); + } + else if ( resultMode == EQueryResultModeId ) + { + // const RArray& arr = iQuery->ResultIds(); + // CopyArrayL( iResultArray, arr ); + // + // copy this arr into member iResultIds and perform full search + // for the whole set or a partial search if result set is very large + // partial search indexes could be in another member iPartialResultdIds + // observer gets notified after the first partial search + + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, KErrNotSupported ); + } + else if ( resultMode == EQueryResultModeCount ) + { + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EUnknownQueryComplete, aError ); + } + else if ( resultMode == EQueryResultModeItem ) + { + if ( iQueryType == ESearchAudio ) + { + iSearchList->Reset(); + iSearchList->TakeResultL( iQuery, EAttrMusic ); + SearchVideoL( iSearchText ); + } + else if ( iQueryType == ESearchVideo ) + { + iSearchList->TakeResultL( iQuery, EAttrVideo ); + iSearchList->Sort(); + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EQueryComplete, aError ); + } + else + { + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EQueryComplete, aError ); + } + } + else + { + iObserver->HandleMFEventL( MMediaFileHandlerObserver::EError, KErrNotSupported ); + } + } +*/ + + +/* + //private: + //void ReadDirectoryL( const TDesC& aDirectory ); + //void ReadRomFilesL(); + //void SortRomFiles(); + //static TInt CompareFileName( const TFileName& aFirst, const TFileName& aSecond ); + //static TInt CompareStr( const TFileName& aFirst, const TFileName& aSecond ); + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::ReadRomFilesL (to be removed) +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHandler::ReadRomFilesL() + { + _LIT( KFormat, "%S%S" ); + + iRomFileList.Reset(); + + TFileName fileName; + fileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::SoundsPath() ); + TRAP_IGNORE( ReadDirectoryL( fileName ) ); + + fileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::DigitalSoundsPath() ); + TRAP_IGNORE( ReadDirectoryL( fileName ) ); + + fileName.Format( KFormat, &PathInfo::RomRootPath(), &PathInfo::SimpleSoundsPath() ); + TRAP_IGNORE( ReadDirectoryL( fileName ) ); + + TInt count = iRomFileList.Count(); + for ( TInt i=0; i buf( aDirectory ); + + 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(); + + for ( TInt i=0; i(CMediaFileHandler::CompareFileName)); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::QueryRomFilesL (to be removed) +// +// Finds all tones from rom directories. +// ----------------------------------------------------------------------------- +// +void CMediaFileHandler::QueryRomFilesL( TInt aAttr ) + { + QueryEmptyL(); + + iQueryType = EQueryRomFile; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::GetRomFileAttribute (to be removed) +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHandler::GetRomFileAttribute( TInt aIndex, TInt aAttr, TDes& aValue ) + { + TInt count = iRomFileList.Count(); + + __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) ); + + if ( aAttr == EAttrFullName ) + { + StrCopy( aValue, iRomFileList[aIndex] ); + } + else if ( aAttr == EAttrSongName || aAttr == EAttrFileName ) + { + TParsePtrC parse( iRomFileList[aIndex] ); + StrCopy( aValue, parse.Name() ); + } + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::RomFileAttribute (to be removed) +// +// ----------------------------------------------------------------------------- +// +TInt CMediaFileHandler::RomFileAttribute( TInt aIndex, TInt aAttr ) + { + TInt count = iRomFileList.Count(); + + __ASSERT_ALWAYS( aIndex >= 0 && aIndex < count, Panic( KErrGeneral ) ); + + TInt ret = KErrNotFound; + if ( aAttr == EAttrMediaType ) + { + ret = EMediaTypeTone; + } + else if ( aAttr == EAttrStorageType ) + { + ret = EPhoneMemory; + } + + return ret; + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::CompareFileName +// +// ----------------------------------------------------------------------------- +// +/* +TInt CMediaFileHandler::CompareFileName(const TFileName& aFirst, const TFileName& aSecond) + { + TParsePtrC parseFirst( aFirst ); + TParsePtrC parseSecond( aSecond ); + + return parseFirst.Name().Compare( parseSecond.Name() ); + } +*/ + +// ----------------------------------------------------------------------------- +// CMediaFileHandler::CompareStr +// +// ----------------------------------------------------------------------------- +// +/* +TInt CMediaFileHandler::CompareStr(const TFileName& aFirst, const TFileName& aSecond) + { + return aFirst.Compare( aSecond ); + } +*/ + + + +/******************************************************************************* + * class TMediaFileHistoryItem + *******************************************************************************/ + +/* +// ----------------------------------------------------------------------------- +// TMediaFileHistoryItem::Id +// +// ----------------------------------------------------------------------------- +// +TInt64 TMediaFileHistoryItem::Id() + { + return iId; + } + + +// ----------------------------------------------------------------------------- +// TMediaFileHistoryItem::SetId +// +// ----------------------------------------------------------------------------- +// +void TMediaFileHistoryItem::SetId( TInt64 aId ) + { + iId = aId; + } + + +// ----------------------------------------------------------------------------- +// TMediaFileHistoryItem::Time +// +// ----------------------------------------------------------------------------- +// +TTime TMediaFileHistoryItem::Time() + { + return iTime; + } + + +// ----------------------------------------------------------------------------- +// TMediaFileHistoryItem::SetTime +// +// ----------------------------------------------------------------------------- +// +void TMediaFileHistoryItem::SetTime( TTime aTime ) + { + iTime = aTime; + } + + +// ----------------------------------------------------------------------------- +// TMediaFileHistoryItem::InternalizeL +// +// ----------------------------------------------------------------------------- +// +void TMediaFileHistoryItem::InternalizeL( RReadStream& aStream ) + { + aStream >> iId; + + if ( iId < 0 ) + { + User::Leave( KErrCorrupt ); + } + + TInt64 temp = 0; + aStream >> temp; + + if ( temp <= 0 ) + { + User::Leave( KErrCorrupt ); + } + TTime time( temp ); + iTime = time; + + iPresent = ETrue; + iFullName = KNullDesC; + } + + +// ----------------------------------------------------------------------------- +// TMediaFileHistoryItem::ExternalizeL +// +// ----------------------------------------------------------------------------- +// +void TMediaFileHistoryItem::ExternalizeL( RWriteStream& aStream ) + { + aStream << iId; + aStream << iTime.Int64(); + } +*/ + + + +/******************************************************************************* + * class CMediaFileHistory + *******************************************************************************/ + +/* +// ----------------------------------------------------------------------------- +// CMediaFileHistory::NewL +// +// ----------------------------------------------------------------------------- +// +CMediaFileHistory* CMediaFileHistory::NewL() + { + CMediaFileHistory* self = new (ELeave) CMediaFileHistory(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(self ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::CMediaFileHistory +// +// ----------------------------------------------------------------------------- +// +CMediaFileHistory::CMediaFileHistory() + { + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::ConstructL +// +// Note: Sessionpath in emulator is '\epoc32\winscw\c\private\2000F85A' +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::ConstructL() + { + _LIT( KHistoryFile, "MediaFileHistory" ); + const TInt KHistoryDrive = EDriveC; + + User::LeaveIfError( iFsSession.Connect() ); + User::LeaveIfError( iFsSession.SetSessionToPrivate( KHistoryDrive ) ); + + User::LeaveIfError( iFsSession.SessionPath( iPath ) ); + BaflUtils::EnsurePathExistsL( iFsSession, iPath ); + iPath.Append( KHistoryFile ); + + TInt err = KErrNone; + TRAP( err, ReadHistoryL() ); + + if ( err != KErrNone && err != KErrNoMemory ) + { + // history file was just created or it is corrupted + iList.Reset(); + } + } + + +// ---------------------------------------------------------------------------- +// Destructor +// +// ---------------------------------------------------------------------------- +// +CMediaFileHistory::~CMediaFileHistory() + { + Clean(); + + TRAP_IGNORE( WriteHistoryL() ); + + iList.Close(); + iFsSession.Close(); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::AddItemL +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::AddItemL( TInt64 aId ) + { + TMediaFileHistoryItem item; + + TTime t; + t.UniversalTime(); + + item.SetTime( t ); + item.SetId( aId ); + + AddItemL( item ); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::Count +// +// ----------------------------------------------------------------------------- +// +TInt CMediaFileHistory::Count() + { + return iList.Count(); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::Reset +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::Reset() + { + iList.Reset(); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::SetFileNameL +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::SetFileNameL( const TDesC& aFullName, TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iList.Count() ) + { + TMFDialogUtil::Panic( KErrArgument ); + } + + TMediaFileHistoryItem& item = iList[aIndex]; + TMFDialogUtil::StrCopy( item.iFullName, aFullName ); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::FileName +// +// ----------------------------------------------------------------------------- +// +const TDesC& CMediaFileHistory::FileName( TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iList.Count() ) + { + TMFDialogUtil::Panic( KErrArgument ); + } + + TMediaFileHistoryItem& item = iList[aIndex]; + return item.iFullName; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::SetPresent +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::SetPresent( TBool aPresent, TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iList.Count() ) + { + TMFDialogUtil::Panic( KErrArgument ); + } + + TMediaFileHistoryItem& item = iList[aIndex]; + item.iPresent = aPresent; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::Id +// +// ----------------------------------------------------------------------------- +// +TInt64 CMediaFileHistory::Id( TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iList.Count() ) + { + TMFDialogUtil::Panic( KErrArgument ); + } + + TMediaFileHistoryItem& item = iList[aIndex]; + return item.iId; + + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::InternalizeL +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::InternalizeL( RReadStream& aStream ) + { + TInt count = aStream.ReadInt32L(); + if ( count < 0 || count > KMaxHistoryItemCount ) + { + User::Leave( KErrCorrupt ); + } + + for ( TInt i=0; i KMaxHistoryItemCount ) + { + iList.Remove( count - 1 ); + return ETrue; + } + + return EFalse; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::AddItemL +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::AddItemL( TMediaFileHistoryItem aItem ) + { + TInt index = ItemIndex( aItem.iId ); + if ( index != KErrNotFound ) + { + iList.Remove(index); + } + + User::LeaveIfError( iList.Append( aItem ) ); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::ItemIndex +// +// ----------------------------------------------------------------------------- +// +TInt CMediaFileHistory::ItemIndex( TInt aId ) + { + TInt count = iList.Count(); + + for (TInt i=0; i= iList.Count() ) + { + TMFDialogUtil::Panic( KErrArgument ); + } + + return iList[aIndex]; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::Sort +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::Sort() + { + iList.Sort( TLinearOrder(CMediaFileHistory::CompareItems) ); + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::CompareItems +// +// ----------------------------------------------------------------------------- +// +TInt CMediaFileHistory::CompareItems( const TMediaFileHistoryItem& aFirst, + const TMediaFileHistoryItem& aSecond ) + { + if ( aFirst.iTime > aSecond.iTime ) + { + return -1; + } + else if ( aFirst.iTime < aSecond.iTime ) + { + return 1; + } + return 0; + } + + +// ----------------------------------------------------------------------------- +// CMediaFileHistory::GetTimeText +// +// ----------------------------------------------------------------------------- +// +void CMediaFileHistory::GetTimeText( TDes& aText, TTime aTime ) + { + _LIT( KFormat, "%02d.%02d.%04d %02d:%02d:%02d" ); + + TDateTime dt = aTime.DateTime(); + aText.Format( KFormat, dt.Day()+1, dt.Month()+1, dt.Year(), dt.Hour(), dt.Minute(), dt.Second() ); + } + +*/ + +#endif // #ifdef _DEBUG + +// End of File +