1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-07-31 19:30:21 +02:00

Hook up async url retrieval in DownloadJob.

This commit is contained in:
Christian Muehlhaeuser
2015-03-25 07:34:31 +01:00
parent 788e651713
commit 5342ba22de
2 changed files with 46 additions and 43 deletions

View File

@@ -18,6 +18,7 @@
#include "DownloadJob.h" #include "DownloadJob.h"
#include "Result.h"
#include "Track.h" #include "Track.h"
#include "Result.h" #include "Result.h"
#include "resolvers/ScriptResolver.h" #include "resolvers/ScriptResolver.h"
@@ -41,28 +42,9 @@ DownloadJob::DownloadJob( const Tomahawk::result_ptr& result, DownloadFormat for
, m_fileSize( 0 ) , m_fileSize( 0 )
, m_format( format ) , m_format( format )
, m_track( result->track() ) , m_track( result->track() )
, m_result( result )
{ {
m_finished = ( state == Finished ); m_finished = ( state == Finished );
if (result->resolvedByCollection())
{
Tomahawk::ScriptCollection* collection = qobject_cast<Tomahawk::ScriptCollection*>( result->resolvedByCollection().data() );
if(collection)
{
QVariantMap arguments;
arguments[ "url" ] = format.url;
// HACK: *shrug* WIP.
Tomahawk::ScriptJob* job = collection->scriptObject()->invoke("getStreamUrlPromise", arguments);
connect( job, SIGNAL( done(QVariantMap) ), SLOT( onUrlRetrieved(QVariantMap) ) );
job->start();
}
}
}
void DownloadJob::onUrlRetrieved(const QVariantMap& data)
{
tLog() << Q_FUNC_INFO << data;
} }
@@ -71,6 +53,37 @@ DownloadJob::~DownloadJob()
} }
void
DownloadJob::onUrlRetrieved( const QVariantMap& data )
{
tDebug() << Q_FUNC_INFO << data;
QUrl localFile = prepareFilename();
if ( m_file )
{
tLog() << "Recovering from failed download for track:" << toString() << "-" << m_retries << "retries so far.";
m_finished = false;
delete m_file;
m_file = 0;
}
tLog() << "Saving download" << m_format.url << "to file:" << localFile << localFile.toLocalFile();
m_file = new QFile( localFile.toString() );
m_localFile = localFile.toString();
if ( m_tryResuming && checkForResumedFile() )
return;
m_reply = Tomahawk::Utils::nam()->get( QNetworkRequest( data[ "url" ].toString() ) );
connect( m_reply, SIGNAL( error( QNetworkReply::NetworkError ) ), SLOT( onDownloadError( QNetworkReply::NetworkError ) ) );
connect( m_reply, SIGNAL( downloadProgress( qint64, qint64 ) ), SLOT( onDownloadProgress( qint64, qint64 ) ) );
connect( m_reply, SIGNAL( finished() ), SLOT( onDownloadNetworkFinished() ) );
setState( Running );
}
int int
DownloadJob::progressPercentage() const DownloadJob::progressPercentage() const
{ {
@@ -191,31 +204,20 @@ DownloadJob::retry()
bool bool
DownloadJob::download() DownloadJob::download()
{ {
QUrl localFile = prepareFilename(); if ( m_result->resolvedByCollection() )
if ( m_file )
{ {
tLog() << "Recovering from failed download for track:" << toString() << "-" << m_retries << "retries so far."; Tomahawk::ScriptCollection* collection = qobject_cast<Tomahawk::ScriptCollection*>( m_result->resolvedByCollection().data() );
m_finished = false; if ( collection )
delete m_file; {
m_file = 0; QVariantMap arguments;
arguments[ "url" ] = m_format.url;
// HACK: *shrug* WIP.
Tomahawk::ScriptJob* job = collection->scriptObject()->invoke( "getStreamUrlPromise", arguments );
connect( job, SIGNAL( done(QVariantMap) ), SLOT( onUrlRetrieved(QVariantMap) ) );
job->start();
}
} }
tLog() << "Saving download to file:" << localFile << localFile.toLocalFile();
m_file = new QFile( localFile.toString() );
m_localFile = localFile.toString();
if ( m_tryResuming && checkForResumedFile() )
return true;
m_reply = Tomahawk::Utils::nam()->get( QNetworkRequest( m_format.url ) );
connect( m_reply, SIGNAL( error( QNetworkReply::NetworkError ) ), SLOT( onDownloadError( QNetworkReply::NetworkError ) ) );
connect( m_reply, SIGNAL( downloadProgress( qint64, qint64 ) ), SLOT( onDownloadProgress( qint64, qint64 ) ) );
connect( m_reply, SIGNAL( finished() ), SLOT( onDownloadNetworkFinished() ) );
setState( Running );
return true; return true;
} }

View File

@@ -113,6 +113,7 @@ private:
DownloadFormat m_format; DownloadFormat m_format;
Tomahawk::track_ptr m_track; Tomahawk::track_ptr m_track;
Tomahawk::result_ptr m_result;
}; };
typedef QSharedPointer<DownloadJob> downloadjob_ptr; typedef QSharedPointer<DownloadJob> downloadjob_ptr;