--- /dev/null
+#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;
+}