From 8ed4c3a43f987e14eda47cf7b2287d2c14dcc70c Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Fri, 23 May 2014 16:15:55 +0100 Subject: [PATCH] Add parameter to specify additional headers to a streamURL * Fixes TWK-1623 --- .../resolvers/JSResolverHelper.cpp | 28 ++++++++++++++++--- src/libtomahawk/resolvers/JSResolverHelper.h | 4 ++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/resolvers/JSResolverHelper.cpp b/src/libtomahawk/resolvers/JSResolverHelper.cpp index 65569929b..b8b30bbc9 100644 --- a/src/libtomahawk/resolvers/JSResolverHelper.cpp +++ b/src/libtomahawk/resolvers/JSResolverHelper.cpp @@ -43,6 +43,7 @@ #include #include #include +#include using namespace Tomahawk; @@ -463,6 +464,13 @@ JSResolverHelper::addCustomUrlHandler( const QString& protocol, } +void +JSResolverHelper::reportStreamUrl( const QString& qid, const QString& streamUrl ) +{ + reportStreamUrl( qid, streamUrl, QVariantMap() ); +} + + void JSResolverHelper::addCustomUrlTranslator( const QString& protocol, const QString& callbackFuncName, @@ -529,7 +537,7 @@ JSResolverHelper::customIODeviceFactory( const Tomahawk::result_ptr&, const QStr QString urlStr = m_resolver->d_func()->engine->mainFrame()->evaluateJavaScript( getUrl ).toString(); - returnStreamUrl( urlStr, callback ); + returnStreamUrl( urlStr, QMap(), callback ); } } @@ -564,19 +572,28 @@ JSResolverHelper::customUrlTranslator( const Tomahawk::result_ptr&, const QStrin void JSResolverHelper::reportStreamUrl( const QString& qid, - const QString& streamUrl ) + const QString& streamUrl, const QVariantMap& headers ) { if ( !m_streamCallbacks.contains( qid ) ) return; boost::function< void( QSharedPointer< QIODevice >& ) > callback = m_streamCallbacks.take( qid ); - returnStreamUrl( streamUrl, callback ); + QMap parsedHeaders; + foreach ( const QString& key, headers.keys()) { + Q_ASSERT_X( headers[key].canConvert( QVariant::String ), Q_FUNC_INFO, "Expected a Map of string for additional headers" ); + if ( headers[key].canConvert( QVariant::String ) ) { + parsedHeaders.insert( key, headers[key].toString() ); + } + } + + returnStreamUrl( streamUrl, parsedHeaders, callback ); } void -JSResolverHelper::returnStreamUrl( const QString& streamUrl, boost::function< void( QSharedPointer< QIODevice >& ) > callback ) +JSResolverHelper::returnStreamUrl( const QString& streamUrl, const QMap& headers, + boost::function< void( QSharedPointer< QIODevice >& ) > callback ) { QSharedPointer< QIODevice > sp; if ( streamUrl.isEmpty() ) @@ -587,6 +604,9 @@ JSResolverHelper::returnStreamUrl( const QString& streamUrl, boost::function< vo QUrl url = QUrl::fromEncoded( streamUrl.toUtf8() ); QNetworkRequest req( url ); + foreach ( const QString& key , headers.keys() ) { + req.setRawHeader( key.toLatin1(), headers[key].toLatin1() ); + } tDebug() << "Creating a QNetowrkReply with url:" << req.url().toString(); QNetworkReply* reply = Tomahawk::Utils::nam()->get( req ); diff --git a/src/libtomahawk/resolvers/JSResolverHelper.h b/src/libtomahawk/resolvers/JSResolverHelper.h index c55a2c9ea..fd1acd207 100644 --- a/src/libtomahawk/resolvers/JSResolverHelper.h +++ b/src/libtomahawk/resolvers/JSResolverHelper.h @@ -46,6 +46,7 @@ public: Q_INVOKABLE void addCustomUrlHandler( const QString& protocol, const QString& callbackFuncName, const QString& isAsynchronous = "false" ); Q_INVOKABLE void reportStreamUrl( const QString& qid, const QString& streamUrl ); + Q_INVOKABLE void reportStreamUrl( const QString& qid, const QString& streamUrl, const QVariantMap& headers ); Q_INVOKABLE void addCustomUrlTranslator( const QString& protocol, const QString& callbackFuncName, const QString& isAsynchronous = "false" ); Q_INVOKABLE void reportUrlTranslation( const QString& qid, const QString& streamUrl ); @@ -85,7 +86,8 @@ private slots: private: Tomahawk::query_ptr parseTrack( const QVariantMap& track ); - void returnStreamUrl( const QString& streamUrl, boost::function< void( QSharedPointer< QIODevice >& ) > callback ); + void returnStreamUrl( const QString& streamUrl, const QMap& headers, + boost::function< void( QSharedPointer< QIODevice >& ) > callback ); void returnUrlTranslation( const QString& streamUrl, boost::function< void( const QString& ) > callback ); QString m_scriptPath, m_urlCallback, m_urlTranslator;