1 #include "MafwGstRendererPlaylistFileUtility.h"
2 #include <glib-object.h>
7 /********************************************************************
8 * MafwGstRendererPlaylistFileUtility::MafwGstRendererPlaylistFileUtility
9 ********************************************************************/
10 MafwGstRendererPlaylistFileUtility::MafwGstRendererPlaylistFileUtility(QObject* parent):
11 QObject(parent), m_parserId(0), m_firstItem(false)
16 /********************************************************************
17 * MafwGstRendererPlaylistFileUtility::MafwGstRendererPlaylistFileUtility
18 ********************************************************************/
19 MafwGstRendererPlaylistFileUtility::~MafwGstRendererPlaylistFileUtility()
21 qDebug() << __PRETTY_FUNCTION__;
24 /********************************************************************
25 * MafwGstRendererPlaylistFileUtility::getUriList
26 ********************************************************************/
27 QStringList MafwGstRendererPlaylistFileUtility::getUriList()
32 /********************************************************************
33 * MafwGstRendererPlaylistFileUtility::playPlaylistFile
34 ********************************************************************/
35 void MafwGstRendererPlaylistFileUtility::parsePlaylistFile(const QUrl& url)
37 qDebug() << __PRETTY_FUNCTION__;
39 if (url.isValid() && !url.scheme().isEmpty())
42 m_parserId = totem_pl_parser_new ();
43 g_object_set(m_parserId, "recurse", false, "disable-unsafe",
45 g_signal_connect(G_OBJECT(m_parserId), "entry-parsed", G_CALLBACK(uriParsed), this);
46 totem_pl_parser_parse_async(m_parserId,
47 url.toString().toAscii().constData(),
50 GAsyncReadyCallback(readyCb),
52 g_object_unref(m_parserId);
57 Q_EMIT parsingReady(false);
61 /********************************************************************
62 * MafwGstRendererPlaylistFileUtility::takeFirstUri
63 ********************************************************************/
64 QString MafwGstRendererPlaylistFileUtility::takeFirstUri()
66 if (m_uriList.isEmpty())
68 qDebug() << __PRETTY_FUNCTION__ << ": there are no more items parsed";
73 return m_uriList.takeFirst();
77 /********************************************************************
78 * MafwGstRendererPlaylistFileUtility::setPendingError
79 ********************************************************************/
80 void MafwGstRendererPlaylistFileUtility::setPendingError(MafwError& error)
82 m_pendingError = error;
85 /********************************************************************
86 * MafwGstRendererPlaylistFileUtility::takePendingError
87 ********************************************************************/
88 MafwError MafwGstRendererPlaylistFileUtility::takePendingError()
90 MafwError retMe = m_pendingError;
91 m_pendingError = MafwError();
96 /********************************************************************
97 * MafwGstRendererPlaylistFileUtility::uriParsed
98 ********************************************************************/
99 void MafwGstRendererPlaylistFileUtility::uriParsed(TotemPlParser* parser,
101 gpointer /*metadata*/,
102 MafwGstRendererPlaylistFileUtility* self)
104 qDebug() << __PRETTY_FUNCTION__ << parser << uri;
106 if (uri && (parser == self->m_parserId))
108 QString modifiedURI = self->manHandleURI(uri);
109 self->m_uriList.append(modifiedURI);
110 if (self->m_firstItem)
112 Q_EMIT self->firstItemParsed();
113 self->m_firstItem = false;
118 /********************************************************************
119 * MafwGstRendererPlaylistFileUtility::readyCb
120 ********************************************************************/
121 void MafwGstRendererPlaylistFileUtility::readyCb(TotemPlParser* parser,
122 GAsyncResult* async_result,
123 MafwGstRendererPlaylistFileUtility* self)
125 qDebug() << __PRETTY_FUNCTION__ << parser;
126 if (parser == self->m_parserId)
131 TotemPlParserResult result = totem_pl_parser_parse_finish(parser,
134 qDebug() << __PRETTY_FUNCTION__ << result;
135 if (result != TOTEM_PL_PARSER_RESULT_SUCCESS)
138 qWarning() << __PRETTY_FUNCTION__ << ": Playlist file parsing failed";
141 qWarning() << error->message;
142 g_error_free (error);
145 //Actually parsing is not ready yet, we might have no results yet.
146 Q_EMIT self->parsingReady(success);
150 /********************************************************************
151 * MafwGstRendererPlaylistFileUtility::manHandleURI
152 ********************************************************************/
153 QString MafwGstRendererPlaylistFileUtility::manHandleURI(const QString &itemUri) const
155 qDebug() << __FUNCTION__ << "Orig: " << itemUri;
156 QString modifiedUri = itemUri;
158 if( itemUri.endsWith(".asf", Qt::CaseInsensitive)
159 && itemUri.startsWith("http://", Qt::CaseInsensitive) )
161 modifiedUri.replace(0,4, "mmsh");
163 qDebug() << __FUNCTION__ << "Handled: " << modifiedUri;