19 #include <QNetworkAccessManager>
20 #include <QNetworkReply>
22 using namespace Marble;
24 class Marble::HttpJobPrivate
27 HttpJobPrivate(
const QUrl & sourceUrl,
const QString & destFileName,
28 const QString &
id, QNetworkAccessManager *networkAccessManager );
31 QString m_destinationFileName;
32 QString m_initiatorId;
36 QNetworkAccessManager *
const m_networkAccessManager;
37 QNetworkReply *m_networkReply;
40 HttpJobPrivate::HttpJobPrivate(
const QUrl & sourceUrl,
const QString & destFileName,
41 const QString &
id, QNetworkAccessManager *networkAccessManager )
42 : m_sourceUrl( sourceUrl ),
43 m_destinationFileName( destFileName ),
49 m_pluginId(
"unknown" ),
50 m_networkAccessManager( networkAccessManager ),
56 HttpJob::HttpJob(
const QUrl & sourceUrl,
const QString & destFileName,
const QString &
id, QNetworkAccessManager *networkAccessManager )
57 : d( new HttpJobPrivate( sourceUrl, destFileName, id, networkAccessManager ) )
68 return d->m_sourceUrl;
78 return d->m_initiatorId;
83 d->m_initiatorId = id;
88 return d->m_destinationFileName;
93 d->m_destinationFileName = fileName;
98 if( d->m_trialsLeft > 0 ) {
109 return d->m_downloadUsage;
114 d->m_downloadUsage =
usage;
119 d->m_pluginId = pluginId;
124 switch ( d->m_downloadUsage ) {
132 qCritical() <<
"Unknown download usage value:" << d->m_downloadUsage;
139 QNetworkRequest request( d->m_sourceUrl );
140 request.setAttribute( QNetworkRequest::HttpPipeliningAllowedAttribute,
true );
141 request.setRawHeader(
"User-Agent",
userAgent() );
142 d->m_networkReply = d->m_networkAccessManager->get( request );
144 connect( d->m_networkReply, SIGNAL(downloadProgress(qint64,qint64)),
145 SLOT(downloadProgress(qint64,qint64)));
146 connect( d->m_networkReply, SIGNAL(error(QNetworkReply::NetworkError)),
147 SLOT(error(QNetworkReply::NetworkError)));
148 connect( d->m_networkReply, SIGNAL(finished()),
151 void HttpJob::downloadProgress( qint64 bytesReceived, qint64 bytesTotal )
153 Q_UNUSED(bytesReceived);
154 Q_UNUSED(bytesTotal);
159 void HttpJob::error( QNetworkReply::NetworkError code )
164 void HttpJob::finished()
166 QNetworkReply::NetworkError
const error = d->m_networkReply->error();
170 const QVariant httpPipeliningWasUsed =
171 d->m_networkReply->attribute( QNetworkRequest::HttpPipeliningWasUsedAttribute );
172 if ( !httpPipeliningWasUsed.isNull() )
173 mDebug() <<
"http pipelining used:" << httpPipeliningWasUsed.toBool();
176 case QNetworkReply::NoError: {
178 const QVariant redirectionAttribute =
179 d->m_networkReply->attribute( QNetworkRequest::RedirectionTargetAttribute );
180 if ( !redirectionAttribute.isNull() ) {
181 emit
redirected(
this, redirectionAttribute.toUrl() );
185 const QByteArray data = d->m_networkReply->readAll();
195 d->m_networkReply->disconnect(
this );
197 d->m_networkReply->deleteLater();
198 d->m_networkReply = 0;
201 #include "HttpJob.moc"
void setInitiatorId(const QString &)
void setSourceUrl(const QUrl &)
DownloadUsage
This enum is used to describe the type of download.
void jobDone(HttpJob *, int errorCode)
errorCode contains 0, if there was no error and 1 otherwise
Browsing mode, normal operation of Marble, like a web browser.
void dataReceived(HttpJob *job, QByteArray data)
This signal is emitted if the data was successfully received and the argument data contains completel...
HttpJob(const QUrl &sourceUrl, const QString &destFileName, const QString &id, QNetworkAccessManager *networkAccessManager)
void setDownloadUsage(const DownloadUsage)
QByteArray userAgent() const
QString initiatorId() const
QString destinationFileName() const
DownloadUsage downloadUsage() const
static QByteArray userAgent(const QString &platform, const QString &plugin)
void setUserAgentPluginId(const QString &pluginId) const
void redirected(HttpJob *job, QUrl redirectionTarget)
QDebug mDebug()
a function to replace qDebug() in Marble library code
void setDestinationFileName(const QString &)
Bulk download, for example "File/Download region".
void usage(const QString &app)