• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • lib
  • marble
HttpJob.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2006-2007 Torsten Rahn <tackat@kde.org>
9 // Copyright 2007 Inge Wallin <ingwa@kde.org>
10 // Copyright 2008,2009 Jens-Michael Hoffmann <jensmh@gmx.de>
11 // Copyright 2008 Pino Toscano <pino@kde.org>
12 //
13 
14 #include "HttpJob.h"
15 
16 #include "MarbleDebug.h"
17 #include "TinyWebBrowser.h"
18 
19 #include <QNetworkAccessManager>
20 #include <QNetworkReply>
21 
22 using namespace Marble;
23 
24 class Marble::HttpJobPrivate
25 {
26  public:
27  HttpJobPrivate( const QUrl & sourceUrl, const QString & destFileName,
28  const QString &id, QNetworkAccessManager *networkAccessManager );
29 
30  QUrl m_sourceUrl;
31  QString m_destinationFileName;
32  QString m_initiatorId;
33  int m_trialsLeft;
34  DownloadUsage m_downloadUsage;
35  QString m_userAgent;
36  QNetworkAccessManager *const m_networkAccessManager;
37  QNetworkReply *m_networkReply;
38 };
39 
40 HttpJobPrivate::HttpJobPrivate( const QUrl & sourceUrl, const QString & destFileName,
41  const QString &id, QNetworkAccessManager *networkAccessManager )
42  : m_sourceUrl( sourceUrl ),
43  m_destinationFileName( destFileName ),
44  m_initiatorId( id ),
45  m_trialsLeft( 3 ),
46  m_downloadUsage( DownloadBrowse ),
47  // FIXME: remove initialization depending on if empty pluginId
48  // results in valid user agent string
49  m_userAgent( "unknown" ),
50  m_networkAccessManager( networkAccessManager ),
51  m_networkReply( 0 )
52 {
53 }
54 
55 
56 HttpJob::HttpJob( const QUrl & sourceUrl, const QString & destFileName, const QString &id, QNetworkAccessManager *networkAccessManager )
57  : d( new HttpJobPrivate( sourceUrl, destFileName, id, networkAccessManager ) )
58 {
59 }
60 
61 HttpJob::~HttpJob()
62 {
63  delete d;
64 }
65 
66 QUrl HttpJob::sourceUrl() const
67 {
68  return d->m_sourceUrl;
69 }
70 
71 void HttpJob::setSourceUrl( const QUrl &url )
72 {
73  d->m_sourceUrl = url;
74 }
75 
76 QString HttpJob::initiatorId() const
77 {
78  return d->m_initiatorId;
79 }
80 
81 void HttpJob::setInitiatorId( const QString &id )
82 {
83  d->m_initiatorId = id;
84 }
85 
86 QString HttpJob::destinationFileName() const
87 {
88  return d->m_destinationFileName;
89 }
90 
91 void HttpJob::setDestinationFileName( const QString &fileName )
92 {
93  d->m_destinationFileName = fileName;
94 }
95 
96 bool HttpJob::tryAgain()
97 {
98  if( d->m_trialsLeft > 0 ) {
99  d->m_trialsLeft--;
100  return true;
101  }
102  else {
103  return false;
104  }
105 }
106 
107 DownloadUsage HttpJob::downloadUsage() const
108 {
109  return d->m_downloadUsage;
110 }
111 
112 void HttpJob::setDownloadUsage( const DownloadUsage usage )
113 {
114  d->m_downloadUsage = usage;
115 }
116 
117 void HttpJob::setUserAgentPluginId( const QString & pluginId ) const
118 {
119  d->m_userAgent = pluginId;
120 }
121 
122 QByteArray HttpJob::userAgent() const
123 {
124  switch ( d->m_downloadUsage ) {
125  case DownloadBrowse:
126  return TinyWebBrowser::userAgent("Browser", d->m_userAgent);
127  break;
128  case DownloadBulk:
129  return TinyWebBrowser::userAgent("BulkDownloader", d->m_userAgent);
130  break;
131  default:
132  qCritical() << "Unknown download usage value:" << d->m_downloadUsage;
133  return TinyWebBrowser::userAgent("unknown", d->m_userAgent);
134  }
135 }
136 
137 void HttpJob::execute()
138 {
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 );
143 
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()),
149  SLOT(finished()));
150 }
151 void HttpJob::downloadProgress( qint64 bytesReceived, qint64 bytesTotal )
152 {
153  Q_UNUSED(bytesReceived);
154  Q_UNUSED(bytesTotal);
155 // mDebug() << "downloadProgress" << destinationFileName()
156 // << bytesReceived << '/' << bytesTotal;
157 }
158 
159 void HttpJob::error( QNetworkReply::NetworkError code )
160 {
161  mDebug() << "error" << destinationFileName() << code;
162 }
163 
164 void HttpJob::finished()
165 {
166  QNetworkReply::NetworkError const error = d->m_networkReply->error();
167 // mDebug() << "finished" << destinationFileName()
168 // << "error" << error;
169 
170  const QVariant httpPipeliningWasUsed =
171  d->m_networkReply->attribute( QNetworkRequest::HttpPipeliningWasUsedAttribute );
172  if ( !httpPipeliningWasUsed.isNull() )
173  mDebug() << "http pipelining used:" << httpPipeliningWasUsed.toBool();
174 
175  switch ( error ) {
176  case QNetworkReply::NoError: {
177  // check if we are redirected
178  const QVariant redirectionAttribute =
179  d->m_networkReply->attribute( QNetworkRequest::RedirectionTargetAttribute );
180  if ( !redirectionAttribute.isNull() ) {
181  emit redirected( this, redirectionAttribute.toUrl() );
182  }
183  else {
184  // no redirection occurred
185  const QByteArray data = d->m_networkReply->readAll();
186  emit dataReceived( this, data );
187  }
188  }
189  break;
190 
191  default:
192  emit jobDone( this, 1 );
193  }
194 
195  d->m_networkReply->disconnect( this );
196  // No delete. This method is called by a signal QNetworkReply::finished.
197  d->m_networkReply->deleteLater();
198  d->m_networkReply = 0;
199 }
200 
201 #include "HttpJob.moc"
Marble::HttpJob::setInitiatorId
void setInitiatorId(const QString &)
Definition: HttpJob.cpp:81
QVariant::toUrl
QUrl toUrl() const
Marble::HttpJob::setSourceUrl
void setSourceUrl(const QUrl &)
Definition: HttpJob.cpp:71
TinyWebBrowser.h
Marble::DownloadUsage
DownloadUsage
This enum is used to describe the type of download.
Definition: MarbleGlobal.h:164
QByteArray
Marble::HttpJob::jobDone
void jobDone(HttpJob *, int errorCode)
errorCode contains 0, if there was no error and 1 otherwise
QNetworkReply
Marble::DownloadBrowse
Browsing mode, normal operation of Marble, like a web browser.
Definition: MarbleGlobal.h:166
MarbleDebug.h
Marble::HttpJob::sourceUrl
QUrl sourceUrl() const
Definition: HttpJob.cpp:66
Marble::HttpJob::dataReceived
void dataReceived(HttpJob *job, QByteArray data)
This signal is emitted if the data was successfully received and the argument data contains completel...
QNetworkRequest
Marble::HttpJob::HttpJob
HttpJob(const QUrl &sourceUrl, const QString &destFileName, const QString &id, QNetworkAccessManager *networkAccessManager)
Definition: HttpJob.cpp:56
QVariant::isNull
bool isNull() const
Marble::HttpJob::execute
void execute()
Definition: HttpJob.cpp:137
Marble::HttpJob::~HttpJob
~HttpJob()
Definition: HttpJob.cpp:61
Marble::HttpJob::setDownloadUsage
void setDownloadUsage(const DownloadUsage)
Definition: HttpJob.cpp:112
QString
Marble::HttpJob::userAgent
QByteArray userAgent() const
Definition: HttpJob.cpp:122
QUrl
QNetworkAccessManager
Marble::HttpJob::initiatorId
QString initiatorId() const
Definition: HttpJob.cpp:76
Marble::HttpJob::destinationFileName
QString destinationFileName() const
Definition: HttpJob.cpp:86
QNetworkRequest::setRawHeader
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
QNetworkRequest::setAttribute
void setAttribute(Attribute code, const QVariant &value)
QVariant::toBool
bool toBool() const
Marble::HttpJob::downloadUsage
DownloadUsage downloadUsage() const
Definition: HttpJob.cpp:107
Marble::TinyWebBrowser::userAgent
static QByteArray userAgent(const QString &platform, const QString &plugin)
Definition: TinyWebBrowser.cpp:106
Marble::HttpJob::setUserAgentPluginId
void setUserAgentPluginId(const QString &pluginId) const
Definition: HttpJob.cpp:117
HttpJob.h
Marble::HttpJob::tryAgain
bool tryAgain()
Definition: HttpJob.cpp:96
Marble::HttpJob::redirected
void redirected(HttpJob *job, QUrl redirectionTarget)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
Marble::HttpJob::setDestinationFileName
void setDestinationFileName(const QString &)
Definition: HttpJob.cpp:91
Marble::DownloadBulk
Bulk download, for example "File/Download region".
Definition: MarbleGlobal.h:165
QVariant
usage
void usage(const QString &app)
Definition: merge_ts_po.cpp:16
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:39 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal