1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-07-30 19:00:12 +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 "Result.h"
#include "Track.h"
#include "Result.h"
#include "resolvers/ScriptResolver.h"
@@ -41,28 +42,9 @@ DownloadJob::DownloadJob( const Tomahawk::result_ptr& result, DownloadFormat for
, m_fileSize( 0 )
, m_format( format )
, m_track( result->track() )
, m_result( result )
{
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
DownloadJob::progressPercentage() const
{
@@ -191,31 +204,20 @@ DownloadJob::retry()
bool
DownloadJob::download()
{
QUrl localFile = prepareFilename();
if ( m_file )
if ( m_result->resolvedByCollection() )
{
tLog() << "Recovering from failed download for track:" << toString() << "-" << m_retries << "retries so far.";
m_finished = false;
delete m_file;
m_file = 0;
Tomahawk::ScriptCollection* collection = qobject_cast<Tomahawk::ScriptCollection*>( m_result->resolvedByCollection().data() );
if ( collection )
{
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;
}

View File

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