diff -r 000000000000 -r a2952bb97e68 mmappcomponents/playlistengine/src/mpxplaylistrecognizer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/playlistengine/src/mpxplaylistrecognizer.cpp Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,205 @@ +/* +* 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: Recognizer for playlist files. +* +*/ + + + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include "mpxplaylistrecognizer.h" + + +// LOCAL CONSTANTS AND MACROS +const TInt KExtLength = 4; + +// MIME type of the playlist. +_LIT8(KPlaylistMimeType, "playlist/mpegurl"); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::CMPXPlaylistRecognizer() +// C++ default constructor can NOT contain any code, that +// might leave. +// Call base constructor with the recognizer's UID and confidence level +// ----------------------------------------------------------------------------- +CMPXPlaylistRecognizer::CMPXPlaylistRecognizer() + : CApaDataRecognizerType(TUid::Uid(KMPXPlaylistRecognizerDllUid), + CApaDataRecognizerType::EHigh) + { + } + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +void CMPXPlaylistRecognizer::ConstructL() + { + // Set the number of data (MIME) types supported by this recognizer. + iCountDataTypes = 1; + + // instantiate a plugin hanlder that manages playlist plugins. + iPluginHandler = new(ELeave)CMPXPluginHandlerBase( + TUid::Uid(KMPXPlaylistInterfaceUid), + CMPXPluginHandlerBase::ESelectionType, EMPXPlaylistTypeM3U, + *this); + } + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CMPXPlaylistRecognizer* CMPXPlaylistRecognizer::NewL() + { + MPX_DEBUG1("CMPXPlaylistRecognizer::NewL"); + CMPXPlaylistRecognizer* self = new (ELeave) CMPXPlaylistRecognizer(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +CMPXPlaylistRecognizer::~CMPXPlaylistRecognizer() + { + delete iPluginHandler; + } + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::SupportedDataTypeL +// Return the MimeType of the DataType depending on +// mime type of the file +// ----------------------------------------------------------------------------- +TDataType CMPXPlaylistRecognizer::SupportedDataTypeL(TInt aIndex ) const + { + MPX_DEBUG2("CMPXPlaylistRecognizer::SupportedDataTypeL [%d]", aIndex); + + TDataType dataType; + switch ( aIndex ) + { + case 0: + dataType = TDataType(KPlaylistMimeType); + break; + default: + User::Leave(KErrArgument); + break; + } + return dataType; + } + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::PreferredBufSize() +// Return the supposed minimum buffer size we need to +// successfully recognize the data +// ----------------------------------------------------------------------------- +TUint CMPXPlaylistRecognizer::PreferredBufSize() + { + return 0; + } + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::DoRecognizeL +// Attempt to recognize the data +// this recognizer only attempts to match the data and/or file extension +// +// NB if the file is not recognized, this function should NOT leave : +// it should instead set iConfidence = ENotRecognized and return +// the function should only leave if there is an out-of-memory condition +// ----------------------------------------------------------------------------- +void CMPXPlaylistRecognizer::DoRecognizeL( + const TDesC& aName, + const TDesC8& /*aBuffer*/ ) + { + MPX_DEBUG2("CMPXPlaylistRecognizer::DoRecognizeL: aName = %S", &aName); + + // assume match will fail + iConfidence = CApaDataRecognizerType::ENotRecognized; + if ( aName.Length() < KExtLength ) + { + MPX_DEBUG1("CMPXPlaylistRecognizer::DoRecognizeL - Ext not present"); + return; + } + + // get a list of supported extension from playlist plugin handler + iPluginHandler->CreatePluginListL(); + CDesCArray* supportedExtensions = + iPluginHandler->SupportedExtensionsL(); + + // + // determine if the given filename contains an extension that's listed + // as supported + // + TInt count = supportedExtensions->Count(); + for ( TInt i = 0; i < count; i++ ) + { + TPtrC extension = (*supportedExtensions)[i]; + + if ( aName.Right( extension.Length() ).CompareF(extension) == 0 ) + { + MPX_DEBUG1("CMPXPlaylistRecognizer::DoRecognizeL - Possible match"); + iDataType = TDataType(KPlaylistMimeType); + iConfidence = ECertain; + break; + } + } + + delete supportedExtensions; + } + +// ----------------------------------------------------------------------------- +// CMPXPlaylistRecognizer::HandlePluginHandlerEvent +// ----------------------------------------------------------------------------- +// +void CMPXPlaylistRecognizer::HandlePluginHandlerEvent( + TPluginHandlerEvents /* aEvent */, + const TUid& /* aPluginUid */, + TBool /* aLoaded */, + TInt /* aData */) + { + // Do nothing + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= +// ----------------------------------------------------------------------------- +// provides an array that maps a UID for each implementation to its respective +// creation function +// ----------------------------------------------------------------------------- +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KMPXPlaylistRecognizerImplUid, CMPXPlaylistRecognizer::NewL) + }; + +// ----------------------------------------------------------------------------- +// returns the proxy of implementations +// ----------------------------------------------------------------------------- +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +// End of file + +