11 #include "MarbleDebug.h"
12 #include "HttpDownloadManager.h"
14 #include <QNetworkAccessManager>
18 class Marble::HttpJobPrivate
21 HttpJobPrivate(
const QUrl & sourceUrl,
const QString & destFileName,
34 HttpJobPrivate::HttpJobPrivate(
const QUrl & sourceUrl,
const QString & destFileName,
36 : m_sourceUrl( sourceUrl ),
37 m_destinationFileName( destFileName ),
43 m_userAgent(
"unknown" ),
44 m_networkAccessManager( networkAccessManager ),
45 m_networkReply( nullptr )
51 : d( new HttpJobPrivate( sourceUrl, destFileName, id, networkAccessManager ) )
60 QUrl HttpJob::sourceUrl()
const
62 return d->m_sourceUrl;
65 void HttpJob::setSourceUrl(
const QUrl &url )
70 QString HttpJob::initiatorId()
const
72 return d->m_initiatorId;
75 void HttpJob::setInitiatorId(
const QString &
id )
77 d->m_initiatorId = id;
80 QString HttpJob::destinationFileName()
const
82 return d->m_destinationFileName;
85 void HttpJob::setDestinationFileName(
const QString &fileName )
87 d->m_destinationFileName = fileName;
90 bool HttpJob::tryAgain()
92 if( d->m_trialsLeft > 0 ) {
103 return d->m_downloadUsage;
108 d->m_downloadUsage = usage;
111 void HttpJob::setUserAgentPluginId(
const QString & pluginId )
const
113 d->m_userAgent = pluginId;
118 switch ( d->m_downloadUsage ) {
120 return HttpDownloadManager::userAgent(
"Browser", d->m_userAgent);
122 return HttpDownloadManager::userAgent(
"BulkDownloader", d->m_userAgent);
124 qCritical() <<
"Unknown download usage value:" << d->m_downloadUsage;
125 return HttpDownloadManager::userAgent(
"unknown", d->m_userAgent);
129 void HttpJob::execute()
133 request.setRawHeader(
"User-Agent", userAgent() );
134 d->m_networkReply = d->m_networkAccessManager->get( request );
136 connect( d->m_networkReply, SIGNAL(downloadProgress(qint64,qint64)),
137 SLOT(downloadProgress(qint64,qint64)));
140 connect( d->m_networkReply, SIGNAL(finished()),
143 void HttpJob::downloadProgress( qint64 bytesReceived, qint64 bytesTotal )
145 Q_UNUSED(bytesReceived);
146 Q_UNUSED(bytesTotal);
153 mDebug() <<
"error" << destinationFileName() << code;
156 void HttpJob::finished()
162 const QVariant httpPipeliningWasUsed =
164 if ( !httpPipeliningWasUsed.
isNull() )
165 mDebug() <<
"http pipelining used:" << httpPipeliningWasUsed.
toBool();
170 const QVariant redirectionAttribute =
172 if ( !redirectionAttribute.
isNull() ) {
173 emit redirected(
this, redirectionAttribute.
toUrl() );
177 const QByteArray data = d->m_networkReply->readAll();
178 emit dataReceived(
this, data );
184 emit jobDone(
this, 1 );
187 d->m_networkReply->disconnect(
this );
189 d->m_networkReply->deleteLater();
190 d->m_networkReply =
nullptr;
193 #include "moc_HttpJob.cpp"