mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-07-31 19:30:21 +02:00
Support multiple headers in Cloudstream
This commit is contained in:
@@ -517,9 +517,17 @@ JSResolverHelper::nativeRetrieveMetadata( int metadataId, const QString& url,
|
|||||||
|
|
||||||
if ( TomahawkUtils::isHttpResult( url ) || TomahawkUtils::isHttpsResult( url ) )
|
if ( TomahawkUtils::isHttpResult( url ) || TomahawkUtils::isHttpsResult( url ) )
|
||||||
{
|
{
|
||||||
|
QMap<QString, QString> headers;
|
||||||
|
if ( options.contains( "headers" ) && options["headers"].canConvert( QVariant::Map ) )
|
||||||
|
{
|
||||||
|
const QVariantMap variantHeaders = options["headers"].toMap();
|
||||||
|
foreach ( const QString& key, variantHeaders.keys() ) {
|
||||||
|
headers.insert( key, variantHeaders[key].toString() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Add heuristic if size is not defined
|
// TODO: Add heuristic if size is not defined
|
||||||
// TOOD: Support pushing multiple headers
|
CloudStream stream( url, sizehint, headers,
|
||||||
CloudStream stream( url, sizehint, QString("insert headers here"),
|
|
||||||
Tomahawk::Utils::nam() );
|
Tomahawk::Utils::nam() );
|
||||||
stream.Precache();
|
stream.Precache();
|
||||||
QScopedPointer<TagLib::File> tag;
|
QScopedPointer<TagLib::File> tag;
|
||||||
|
@@ -33,12 +33,12 @@ static const int kTaglibSuffixCacheBytes = 8 * 1024;
|
|||||||
}
|
}
|
||||||
|
|
||||||
CloudStream::CloudStream(const QUrl& url,
|
CloudStream::CloudStream(const QUrl& url,
|
||||||
const long length, const QString& auth,
|
const long length, const QMap<QString, QString>& headers,
|
||||||
QNetworkAccessManager* network)
|
QNetworkAccessManager* network)
|
||||||
: url_(url),
|
: url_(url),
|
||||||
encoded_filename_(url.fileName().toUtf8()),
|
encoded_filename_(url.fileName().toUtf8()),
|
||||||
length_(length),
|
length_(length),
|
||||||
auth_(auth),
|
headers_(headers),
|
||||||
cursor_(0),
|
cursor_(0),
|
||||||
network_(network),
|
network_(network),
|
||||||
cache_(length),
|
cache_(length),
|
||||||
@@ -106,8 +106,8 @@ TagLib::ByteVector CloudStream::readBlock(ulong length) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QNetworkRequest request = QNetworkRequest(url_);
|
QNetworkRequest request = QNetworkRequest(url_);
|
||||||
if (!auth_.isEmpty()) {
|
foreach (const QString& key, headers_) {
|
||||||
request.setRawHeader("Authorization", auth_.toUtf8());
|
request.setRawHeader(key.toLatin1(), headers_[key].toUtf8());
|
||||||
}
|
}
|
||||||
request.setRawHeader("Range",
|
request.setRawHeader("Range",
|
||||||
QString("bytes=%1-%2").arg(start).arg(end).toUtf8());
|
QString("bytes=%1-%2").arg(start).arg(end).toUtf8());
|
||||||
|
@@ -32,7 +32,7 @@ class CloudStream : public QObject, public TagLib::IOStream {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
CloudStream(const QUrl& url, const long length,
|
CloudStream(const QUrl& url, const long length,
|
||||||
const QString& auth, QNetworkAccessManager* network);
|
const QMap<QString, QString>& headers, QNetworkAccessManager* network);
|
||||||
|
|
||||||
// Taglib::IOStream
|
// Taglib::IOStream
|
||||||
virtual TagLib::FileName name() const;
|
virtual TagLib::FileName name() const;
|
||||||
@@ -70,7 +70,7 @@ class CloudStream : public QObject, public TagLib::IOStream {
|
|||||||
const QString filename_;
|
const QString filename_;
|
||||||
const QByteArray encoded_filename_;
|
const QByteArray encoded_filename_;
|
||||||
const ulong length_;
|
const ulong length_;
|
||||||
const QString auth_;
|
const QMap<QString, QString> headers_;
|
||||||
|
|
||||||
int cursor_;
|
int cursor_;
|
||||||
QNetworkAccessManager* network_;
|
QNetworkAccessManager* network_;
|
||||||
|
Reference in New Issue
Block a user