--- /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 <f32file.h>
+#include <barsread.h>
+#include <ecom/implementationproxy.h>
+#include <mpxplaylistenginedefs.h>
+#include <mpxplaylistenginedefs.hrh>
+#include <mpxlog.h>
+#include <mpxpluginhandlerbase.h>
+#include <mpxpluginhandlerobserver.h>
+#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
+
+