diff -r 000000000000 -r 31ef7fef3f45 mediamanagementutilities/mediafetch/src/mediafetch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mediamanagementutilities/mediafetch/src/mediafetch.cpp Thu Dec 17 08:55:22 2009 +0200 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2006 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: Media Fetch implementation plug-in loader +* +*/ + + +#include + +#include "mediafetch.h" +#include "mediafetch.hrh" +#include + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CleanupResetAndDestroy +// ----------------------------------------------------------------------------- +// +void CleanupResetAndDestroy( TAny* aObj ) + { + if( aObj ) + { + static_cast( aObj )->ResetAndDestroy(); + } + } + + +// ======== MEMBER FUNCTIONS ======== + +inline CMediaFetch::CMediaFetch() + { + } + +inline void CMediaFetch::ConstructL( TInt aMediaType ) + { + RImplInfoPtrArray implementations; + CleanupStack::PushL( TCleanupItem( CleanupResetAndDestroy, + &implementations) ); + + // Get a list of all Media Fetch plug-in implementations + REComSession::ListImplementationsL( + TUid::Uid( MEDIAFETCH_ECOM_INTERFACE ), + implementations ); + + TUid uid( TUid::Null() ); + TInt version( -1 ); + + const TInt count( implementations.Count() ); + + // Loop through all found implementations + for( TInt i( 0 ); i < count; ++i ) + { + CImplementationInformation* implInfo = implementations[i]; + + // Get media types supported by the implementation + // The value is assumed to be in hexadecimal as defined in the + // Media Fetch Implementation API + TUint val( 0 ); + TLex8 lex( implInfo->DataType() ); + User::LeaveIfError( lex.Val( val, EHex ) ); + + // Check that the implementation supports the wanted media type(s) + if( ( aMediaType & val ) == aMediaType ) + { + // Pick implementation with highest version number + if( implInfo->Version() > version ) + { + uid = implInfo->ImplementationUid(); + version = implInfo->Version(); + } + } + } + + if( uid == TUid::Null() ) + { + User::Leave( KErrNotSupported ); + } + + + // Instatiate the fetcher plug-in implementation + iFetcher = CMediaFetchImplementation::NewL( uid ); + + CleanupStack::PopAndDestroy(); // implementations + } + +CMediaFetch* CMediaFetch::NewL( TInt aMediaType ) + { + CMediaFetch* self = CMediaFetch::NewLC( aMediaType ); + CleanupStack::Pop( self ); + return self; + } + +CMediaFetch* CMediaFetch::NewLC( TInt aMediaType ) + { + CMediaFetch* self = new( ELeave ) CMediaFetch; + CleanupStack::PushL( self ); + self->ConstructL( aMediaType ); + return self; + } + +CMediaFetch::~CMediaFetch() + { + delete iFetcher; + REComSession::FinalClose(); + } + +void CMediaFetch::SetMultiSelectionL( TBool aMultiSelect ) + { + iFetcher->SetMultiSelectionL( aMultiSelect ); + } + +void CMediaFetch::SetMimeTypesL( const MDesCArray& aMimeTypes ) + { + iFetcher->SetMimeTypesL( aMimeTypes ); + } + +void CMediaFetch::SetSelectionSoftkeyL( const TDesC& aSelectionSoftkey ) + { + iFetcher->SetSelectionSoftkeyL( aSelectionSoftkey ); + } + +void CMediaFetch::SetHeadingL( const TDesC& aHeading ) + { + iFetcher->SetHeadingL( aHeading ); + } + +void CMediaFetch::SetVerifierL( MMGFetchVerifier& aVerifier ) + { + iFetcher->SetVerifierL( aVerifier ); + } + +void CMediaFetch::GetCancelerL( MMGFetchCanceler*& aCanceler ) + { + iFetcher->GetCancelerL( aCanceler ); + } + +TBool CMediaFetch::LaunchL( CDesCArray& aSelectedFiles, + TMediaFileType aMediaType ) + { + return iFetcher->LaunchL( aSelectedFiles, aMediaType ); + }