diff -r 000000000000 -r a2952bb97e68 mmappcomponents/audiofetcher/src/audiofetcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/audiofetcher/src/audiofetcher.cpp Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,292 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: provide synchronized access to file system and metadata source +* +*/ + +// INCLUDE FILES +#include // CAknViewAppUi +#include +#include // KDC_APP_RESOURCE_DIR +#include // CEikApplication +#include +#include +#include +#include +#include + +#include "audiofetcher.hrh" // For implementation id +#include "audiofetcher.h" +#include "audiofetcherlog.h" +#include "audiofetcherdialog.h" +#include + +_LIT(KAudioFetcherDialogResource, "AudioFetcherdialog.rsc" ); // AudioFetcherDialog Resource File + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CAudioFetcher* CAudioFetcher::NewL() + { + WLOG("CAudioFetcher::NewL"); + CAudioFetcher* self = new( ELeave ) CAudioFetcher(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CAudioFetcher::ConstructL() + { + WLOG("CAudioFetcher::ConstructL"); + // No implementation required + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------- +// +CAudioFetcher::CAudioFetcher() + { + WLOG("CAudioFetcher::CAudioFetcher"); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CAudioFetcher::~CAudioFetcher() + { + WLOG("CAudioFetcher::~CAudioFetcher >"); + + + if ( iResourceOffset ) + { + CCoeEnv::Static()->DeleteResourceFile(iResourceOffset); + } + + delete iSelectionSoftkey; + delete iTitle; + + WLOG("CAudioFetcher::~CAudioFetcher <"); + } + +// --------------------------------------------------------------------------- +// SetMultiSelectionL +// --------------------------------------------------------------------------- +// +void CAudioFetcher::SetMultiSelectionL( TBool aMultiSelect ) + { + WLOG("CAudioFetcher::SetMultiSelectionL"); + iIsMultiSelection = aMultiSelect; + } + +// --------------------------------------------------------------------------- +// SetMimeTypesL +// --------------------------------------------------------------------------- +// +void CAudioFetcher::SetMimeTypesL( const MDesCArray& /*aMimeTypes*/ ) + { + WLOG("CAudioFetcher::SetMimeTypesL (not supported)"); + // No implementation required (not supported) + } + +// --------------------------------------------------------------------------- +// SetSelectionSoftkeyL +// --------------------------------------------------------------------------- +// +void CAudioFetcher::SetSelectionSoftkeyL( const TDesC& aSelectionSoftkey ) + { + WLOG("CAudioFetcher::SetSelectionSoftkeyL"); + + HBufC* tmp = aSelectionSoftkey.AllocL(); + delete iSelectionSoftkey; + iSelectionSoftkey = tmp; + } + +// --------------------------------------------------------------------------- +// SetHeadingL +// --------------------------------------------------------------------------- +// +void CAudioFetcher::SetHeadingL( const TDesC& aTitle ) + { + WLOG("CAudioFetcher::SetHeadingL"); + + HBufC* tmp = aTitle.AllocL(); + delete iTitle; + iTitle = tmp; + } + +// --------------------------------------------------------------------------- +// SetVerifierL +// --------------------------------------------------------------------------- +// +void CAudioFetcher::SetVerifierL( MMGFetchVerifier& aVerifier ) + { + WLOG("CAudioFetcher::SetVerifierL"); + + iVerifier = &aVerifier; + } + +// --------------------------------------------------------------------------- +// GetCancelerL +// --------------------------------------------------------------------------- +// +void CAudioFetcher::GetCancelerL( MMGFetchCanceler*& aCanceler ) + { + WLOG("CAudioFetcher::GetCancelerL"); + + aCanceler = this; + } + + +// --------------------------------------------------------------------------- +// LaunchL +// --------------------------------------------------------------------------- +// +TBool CAudioFetcher::LaunchL( CDesCArray& aSelectedFiles, + TMediaFileType aMediaType ) + { + WLOG("CAudioFetcher::LaunchL >"); + + TInt buttonId; + TFileName resFile; + TParse parse; + parse.Set( KAudioFetcherDialogResource, &KDC_APP_RESOURCE_DIR, NULL ); + + resFile.Append(parse.FullName()); + GetResourceFilenameL( resFile ); + iResourceOffset = CCoeEnv::Static()->AddResourceFileL( resFile ); + + // Configure heading and filter type + switch ( aMediaType ) + { + case EAudioFile: + case EMusicFile: + { + iTitle = TitleForAudioFetcherL(); + break; + } + case EAnyMediaFile: + { + iTitle = TitleForAnyMediaFileFetcherL(); + break; + } + default: + { + WLOG("CAudioFetcher::LaunchL - Error: Unsupported media type, Leaving"); + User::Leave( KErrNotSupported ); + } + } + + // create the dialog first + CAudioFetcherDialog* dialog = + CAudioFetcherDialog::NewL( aSelectedFiles, iVerifier, *iTitle, iIsMultiSelection, aMediaType ); + + // Returns zero when Fetcher is cancelled by User. + buttonId = dialog->ExecuteLD( R_MODAL_SINGLE_DIALOG ); + + dialog = NULL; + WLOG("CAudioFetcher::LaunchL <"); + // Return false if the fetcher was canceled by user + return ( 0 != buttonId && aSelectedFiles.Count() != 0 ); + } + +// --------------------------------------------------------------------------- +// Return nearest resource file +// --------------------------------------------------------------------------- +// +void CAudioFetcher::GetResourceFilenameL( TFileName& aResFile ) + { + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + + // don't use AknUtils CompleteWithAppPath + aResFile.Insert( 0, TDriveUnit( EDriveC).Name() ); + // try to locate the localised resource + BaflUtils::NearestLanguageFile( fs, aResFile ); + // if the localised resource is found, the file name is changed to + // the localised name (z:\apps\resources\xxx.r001) + if( !BaflUtils::FileExists( fs, aResFile ) ) + { + // not found on c drive, try z + aResFile.Replace( 0, KMaxDriveName, TDriveUnit( EDriveZ ).Name() ); + // try to locate the localised resource again + BaflUtils::NearestLanguageFile( fs, aResFile ); + // if file was not found this time, there is no localised + // resource with the name + if (!BaflUtils::FileExists( fs, aResFile ) ) + { + User::Leave( KErrNotFound ); + } + } + + CleanupStack::PopAndDestroy( &fs ); + } + +// --------------------------------------------------------------------------- +// Return Dialog title +// --------------------------------------------------------------------------- +// +HBufC* CAudioFetcher::TitleForAudioFetcherL() const + { + WLOG("CAudioFetcher::TitleForAudioFetcherL()"); + return TitleL( R_AUDIOFETCHER_DIALOG_TITLE_AUDIO ); + } + +// --------------------------------------------------------------------------- +// Return Dialog title +// --------------------------------------------------------------------------- +// +HBufC* CAudioFetcher::TitleForAnyMediaFileFetcherL() const + { + WLOG("CAudioFetcher::TitleForAudioFetcherL()"); + return TitleL( R_AUDIOFETCHER_DIALOG_TITLE_ANY_FILE ); + } + +// --------------------------------------------------------------------------- +// Return Dialog title +// --------------------------------------------------------------------------- +// +HBufC* CAudioFetcher::TitleL( TInt aSingleSelectionTitleResourceId ) const + { + WLOG("CAudioFetcher::TitleL()"); + + if( !iTitle ) + { + TInt resourceId = aSingleSelectionTitleResourceId; + return CCoeEnv::Static()->AllocReadResourceL( resourceId ); + } + return iTitle; + } + +// ----------------------------------------------------------------------------- +// From MMGFetchCanceler +// ----------------------------------------------------------------------------- +// +void CAudioFetcher::CancelFetcherL() + { + WLOG("CAudioFetcher::CancelFetcherL"); + + } + +// End of File + +