mmappcomponents/playlistengine/src/mpxplaylistrecognizer.cpp
changeset 0 a2952bb97e68
--- /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
+
+