1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-05 13:47:26 +02:00

Add parameter to specify additional headers to a streamURL

* Fixes TWK-1623
This commit is contained in:
Uwe L. Korn
2014-05-23 16:15:55 +01:00
parent 3257d2fbd5
commit 8ed4c3a43f
2 changed files with 27 additions and 5 deletions

View File

@@ -43,6 +43,7 @@
#include <QFileInfo>
#include <QtCrypto>
#include <QWebFrame>
#include <QMap>
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<QString, QString>(), 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<QString, QString> 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<QString, QString>& 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 );

View File

@@ -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<QString, QString>& 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;