diff --git a/data/js/tomahawk.js b/data/js/tomahawk.js index 57ac46a88..6ae289476 100644 --- a/data/js/tomahawk.js +++ b/data/js/tomahawk.js @@ -275,6 +275,9 @@ Tomahawk.Resolver = { getStreamUrl: function (params) { return params; }, + getDownloadUrl: function (params) { + return params; + }, resolve: function() { }, _adapter_resolve: function (params) { @@ -1771,6 +1774,14 @@ Tomahawk.Collection = { return this.resolver.getStreamUrl(params); } + return params; + }, + + getDownloadUrl: function(params) { + if(this.resolver) { + return this.resolver.getDownloadUrl(params); + } + return params; } }; diff --git a/src/libtomahawk/DownloadJob.cpp b/src/libtomahawk/DownloadJob.cpp index 6d0c15a15..d5a2e8818 100644 --- a/src/libtomahawk/DownloadJob.cpp +++ b/src/libtomahawk/DownloadJob.cpp @@ -206,22 +206,13 @@ DownloadJob::download() { if ( m_state == Running ) return true; + setState( Running ); - if ( m_result->resolvedByCollection() ) - { - Tomahawk::ScriptCollection* collection = qobject_cast( m_result->resolvedByCollection().data() ); - if ( collection ) - { - QVariantMap arguments; - arguments[ "url" ] = m_format.url; + Tomahawk::ScriptJob *job = m_result->resolvedBy()->getDownloadUrl( m_result, m_format ); + connect( job, SIGNAL( done(QVariantMap) ), SLOT( onUrlRetrieved(QVariantMap) ) ); + job->start(); - // HACK: *shrug* WIP. - Tomahawk::ScriptJob* job = collection->scriptObject()->invoke( "getStreamUrl", arguments ); - connect( job, SIGNAL( done(QVariantMap) ), SLOT( onUrlRetrieved(QVariantMap) ) ); - job->start(); - } - } return true; } diff --git a/src/libtomahawk/resolvers/JSResolver.cpp b/src/libtomahawk/resolvers/JSResolver.cpp index 805d8e540..7f3611831 100644 --- a/src/libtomahawk/resolvers/JSResolver.cpp +++ b/src/libtomahawk/resolvers/JSResolver.cpp @@ -711,3 +711,14 @@ JSResolver::getStreamUrl( const result_ptr& result ) return scriptObject()->invoke( "getStreamUrl", arguments ); } + +ScriptJob* +JSResolver::getDownloadUrl( const result_ptr& result, const DownloadFormat& format ) +{ + QVariantMap arguments; + arguments["url"] = format.url.toString(); + arguments["extension"] = format.extension; + arguments["mimetype"] = format.mimetype; + + return scriptObject()->invoke( "getDownloadUrl", arguments ); +} diff --git a/src/libtomahawk/resolvers/JSResolver.h b/src/libtomahawk/resolvers/JSResolver.h index df6ea97e1..3d63e54f0 100644 --- a/src/libtomahawk/resolvers/JSResolver.h +++ b/src/libtomahawk/resolvers/JSResolver.h @@ -76,6 +76,8 @@ public: ScriptAccount* scriptAccount() const; ScriptJob* getStreamUrl( const result_ptr& result ) override; + ScriptJob* getDownloadUrl( const result_ptr& result, const DownloadFormat &format ) override; + public slots: void resolve( const Tomahawk::query_ptr& query ) override; diff --git a/src/libtomahawk/resolvers/Resolver.cpp b/src/libtomahawk/resolvers/Resolver.cpp index 15202e514..055cc845d 100644 --- a/src/libtomahawk/resolvers/Resolver.cpp +++ b/src/libtomahawk/resolvers/Resolver.cpp @@ -45,3 +45,12 @@ Tomahawk::Resolver::getStreamUrl( const result_ptr& result ) return new SyncScriptJob( data ); } + +Tomahawk::ScriptJob* +Tomahawk::Resolver::getDownloadUrl( const result_ptr& result, const DownloadFormat& format ) +{ + QVariantMap data; + data[ "url" ] = format.url.toString(); + + return new SyncScriptJob( data ); +} diff --git a/src/libtomahawk/resolvers/Resolver.h b/src/libtomahawk/resolvers/Resolver.h index d2165e2c8..3e6c2ebf0 100644 --- a/src/libtomahawk/resolvers/Resolver.h +++ b/src/libtomahawk/resolvers/Resolver.h @@ -21,6 +21,7 @@ #include "Typedefs.h" #include "DllMacro.h" +#include "../DownloadJob.h" #include @@ -52,6 +53,7 @@ public: virtual void resolve( const Tomahawk::query_ptr& query ) = 0; virtual ScriptJob* getStreamUrl( const result_ptr& result ); + virtual ScriptJob* getDownloadUrl( const result_ptr& result, const DownloadFormat& format ); }; } //ns diff --git a/src/libtomahawk/resolvers/ScriptCollection.cpp b/src/libtomahawk/resolvers/ScriptCollection.cpp index ab3b5d8e2..e937c146b 100644 --- a/src/libtomahawk/resolvers/ScriptCollection.cpp +++ b/src/libtomahawk/resolvers/ScriptCollection.cpp @@ -235,6 +235,16 @@ ScriptCollection::getStreamUrl( const result_ptr& result ) return scriptObject()->invoke( "getStreamUrl", arguments ); } +ScriptJob* +ScriptCollection::getDownloadUrl( const result_ptr& result, const DownloadFormat& format ) +{ + QVariantMap arguments; + arguments["url"] = format.url.toString(); + arguments["extension"] = format.extension; + arguments["mimetype"] = format.mimetype; + + return scriptObject()->invoke( "getDownloadUrl", arguments ); +} void ScriptCollection::parseMetaData( const QVariantMap& metadata ) diff --git a/src/libtomahawk/resolvers/ScriptCollection.h b/src/libtomahawk/resolvers/ScriptCollection.h index eb9d0ecb3..d54ff2022 100644 --- a/src/libtomahawk/resolvers/ScriptCollection.h +++ b/src/libtomahawk/resolvers/ScriptCollection.h @@ -96,6 +96,7 @@ public: unsigned int timeout() const override; void resolve( const Tomahawk::query_ptr& query ) override; ScriptJob* getStreamUrl( const result_ptr& result ) override; + ScriptJob* getDownloadUrl( const result_ptr& result, const DownloadFormat &format ) override; private slots: void onIconFetched();