Added qmafw-gst-subtitles-renderer-0.0.55 for Meego Harmattan 1.2
[mafwsubrenderer] / qmafw-gst-subtitles-renderer / src / MafwGstRendererPlaylistFileUtility.cpp
diff --git a/qmafw-gst-subtitles-renderer/src/MafwGstRendererPlaylistFileUtility.cpp b/qmafw-gst-subtitles-renderer/src/MafwGstRendererPlaylistFileUtility.cpp
new file mode 100644 (file)
index 0000000..eb70f10
--- /dev/null
@@ -0,0 +1,165 @@
+#include "MafwGstRendererPlaylistFileUtility.h"
+#include <glib-object.h>
+#include <QUrl>
+#include <QDebug>
+#include <MafwError.h>
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::MafwGstRendererPlaylistFileUtility
+ ********************************************************************/
+MafwGstRendererPlaylistFileUtility::MafwGstRendererPlaylistFileUtility(QObject* parent):
+        QObject(parent), m_parserId(0), m_firstItem(false)
+{    
+    g_type_init();
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::MafwGstRendererPlaylistFileUtility
+ ********************************************************************/
+MafwGstRendererPlaylistFileUtility::~MafwGstRendererPlaylistFileUtility()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::getUriList
+ ********************************************************************/
+QStringList MafwGstRendererPlaylistFileUtility::getUriList()
+{
+    return m_uriList;
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::playPlaylistFile
+ ********************************************************************/
+void MafwGstRendererPlaylistFileUtility::parsePlaylistFile(const QUrl& url)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    if (url.isValid() && !url.scheme().isEmpty())
+    {
+        m_uriList.clear();
+        m_parserId = totem_pl_parser_new ();
+        g_object_set(m_parserId, "recurse", false, "disable-unsafe",
+                     true, NULL);
+        g_signal_connect(G_OBJECT(m_parserId), "entry-parsed", G_CALLBACK(uriParsed), this);
+        totem_pl_parser_parse_async(m_parserId,
+                                    url.toString().toAscii().constData(),
+                                    false,
+                                    0,
+                                    GAsyncReadyCallback(readyCb),
+                                    (void *)this);
+        g_object_unref(m_parserId);
+        m_firstItem = true;
+    }
+    else
+    {
+        Q_EMIT parsingReady(false);
+    }
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::takeFirstUri
+ ********************************************************************/
+QString MafwGstRendererPlaylistFileUtility::takeFirstUri()
+{
+    if (m_uriList.isEmpty())
+    {
+        qDebug() << __PRETTY_FUNCTION__ << ": there are no more items parsed";
+        return QString();
+    }
+    else
+    {
+        return m_uriList.takeFirst();
+    }
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::setPendingError
+ ********************************************************************/
+void MafwGstRendererPlaylistFileUtility::setPendingError(MafwError& error)
+{
+    m_pendingError = error;
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::takePendingError
+ ********************************************************************/
+MafwError MafwGstRendererPlaylistFileUtility::takePendingError()
+{
+    MafwError retMe = m_pendingError;
+    m_pendingError = MafwError();
+    return retMe;
+}
+
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::uriParsed
+ ********************************************************************/
+void MafwGstRendererPlaylistFileUtility::uriParsed(TotemPlParser* parser,
+                      gchar* uri,
+                      gpointer /*metadata*/,
+                      MafwGstRendererPlaylistFileUtility* self)
+{
+    qDebug() << __PRETTY_FUNCTION__ << parser << uri;
+
+    if (uri && (parser == self->m_parserId))
+    {
+        QString modifiedURI = self->manHandleURI(uri);
+        self->m_uriList.append(modifiedURI);
+        if (self->m_firstItem)
+        {
+            Q_EMIT self->firstItemParsed();
+            self->m_firstItem = false;
+        }
+    }
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::readyCb
+ ********************************************************************/
+void MafwGstRendererPlaylistFileUtility::readyCb(TotemPlParser* parser,
+                                            GAsyncResult* async_result,
+                                            MafwGstRendererPlaylistFileUtility* self)
+{
+    qDebug() << __PRETTY_FUNCTION__ << parser;
+    if (parser == self->m_parserId)
+    {
+        GError *error = 0;
+        bool success = true;
+
+        TotemPlParserResult  result = totem_pl_parser_parse_finish(parser,
+                                                                   async_result,
+                                                                   &error);
+        qDebug() << __PRETTY_FUNCTION__ << result;
+        if (result != TOTEM_PL_PARSER_RESULT_SUCCESS)
+        {
+            success = false;
+            qWarning() << __PRETTY_FUNCTION__ << ": Playlist file parsing failed";
+            if (error)
+            {
+                qWarning() << error->message;
+                g_error_free (error);
+            }
+        }
+        //Actually parsing is not ready yet, we might have no results yet.
+        Q_EMIT self->parsingReady(success);
+    }
+}
+
+/********************************************************************
+ * MafwGstRendererPlaylistFileUtility::manHandleURI
+ ********************************************************************/
+QString MafwGstRendererPlaylistFileUtility::manHandleURI(const QString &itemUri) const
+{
+    qDebug() << __FUNCTION__ << "Orig: " << itemUri;
+    QString modifiedUri = itemUri;
+
+    if( itemUri.endsWith(".asf", Qt::CaseInsensitive)
+        && itemUri.startsWith("http://", Qt::CaseInsensitive) )
+    {
+        modifiedUri.replace(0,4, "mmsh");
+    }
+    qDebug() << __FUNCTION__ << "Handled: " << modifiedUri;
+    return modifiedUri;
+}