-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a QgsTask for fetching network content
Provides a simple method for fetching remote HTTP content in a QgsTask. Utilises QgsNetworkContentFetcher so Url redirects and progress reports are automatically handled.
- Loading branch information
1 parent
bcf57c3
commit e2f09fa
Showing
10 changed files
with
354 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/qgsnetworkcontentfetchertask.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ | ||
|
||
|
||
|
||
|
||
|
||
|
||
class QgsNetworkContentFetcherTask : QgsTask | ||
{ | ||
%Docstring | ||
Handles HTTP network content fetching in a background task. | ||
|
||
Provides a simple method for fetching remote HTTP content in a QgsTask. | ||
Url redirects are automatically handled. | ||
|
||
After constructing a QgsNetworkContentFetcherTask, callers should | ||
connect to the QgsNetworkContentFetcherTask.fetched signal. They can | ||
then safely access the network reply() from the connected slot | ||
without danger of the task being first removed by the QgsTaskManager. | ||
|
||
.. seealso:: :py:class:`QgsNetworkContentFetcher` | ||
|
||
.. versionadded:: 3.2 | ||
%End | ||
|
||
%TypeHeaderCode | ||
#include "qgsnetworkcontentfetchertask.h" | ||
%End | ||
public: | ||
|
||
QgsNetworkContentFetcherTask( const QUrl &url ); | ||
%Docstring | ||
Constructor for a QgsNetworkContentFetcherTask which fetches | ||
the specified ``url``. | ||
%End | ||
|
||
QgsNetworkContentFetcherTask( const QNetworkRequest &request ); | ||
%Docstring | ||
Constructor for a QgsNetworkContentFetcherTask which fetches | ||
the specified network ``request``. | ||
%End | ||
|
||
~QgsNetworkContentFetcherTask(); | ||
|
||
virtual bool run(); | ||
|
||
|
||
QNetworkReply *reply(); | ||
%Docstring | ||
Returns the network reply. Ownership is not transferred. | ||
|
||
May return None if the request has not yet completed. | ||
%End | ||
|
||
signals: | ||
|
||
void fetched(); | ||
%Docstring | ||
Emitted when the network content has been fetched, regardless | ||
of whether the fetch was successful or not. | ||
|
||
Users of QgsNetworkContentFetcherTask should connect to this signal, | ||
and from the associated slot they can then safely access the network reply() | ||
without danger of the task being first removed by the :py:class:`QgsTaskManager`. | ||
%End | ||
|
||
}; | ||
|
||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/qgsnetworkcontentfetchertask.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/*************************************************************************** | ||
qgsnetworkcontentfetchertask.cpp | ||
------------------- | ||
begin : March 2018 | ||
copyright : (C) 2018 by Nyall Dawson | ||
email : nyall dot dawson at gmail dot com | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#include "qgsnetworkcontentfetchertask.h" | ||
#include "qgsnetworkcontentfetcher.h" | ||
|
||
QgsNetworkContentFetcherTask::QgsNetworkContentFetcherTask( const QUrl &url ) | ||
: QgsNetworkContentFetcherTask( QNetworkRequest( url ) ) | ||
{ | ||
} | ||
|
||
QgsNetworkContentFetcherTask::QgsNetworkContentFetcherTask( const QNetworkRequest &request ) | ||
: QgsTask( tr( "Fetching %1" ).arg( request.url().toString() ) ) | ||
, mRequest( request ) | ||
{ | ||
} | ||
|
||
QgsNetworkContentFetcherTask::~QgsNetworkContentFetcherTask() | ||
{ | ||
if ( mFetcher ) | ||
mFetcher->deleteLater(); | ||
} | ||
|
||
bool QgsNetworkContentFetcherTask::run() | ||
{ | ||
mFetcher = new QgsNetworkContentFetcher(); | ||
QEventLoop loop; | ||
connect( mFetcher, &QgsNetworkContentFetcher::finished, &loop, &QEventLoop::quit ); | ||
connect( mFetcher, &QgsNetworkContentFetcher::downloadProgress, this, [ = ]( qint64 bytesReceived, qint64 bytesTotal ) | ||
{ | ||
if ( bytesTotal > 0 ) | ||
{ | ||
setProgress( ( bytesReceived * 100 ) / bytesTotal ); | ||
} | ||
} ); | ||
mFetcher->fetchContent( mRequest ); | ||
loop.exec(); | ||
emit fetched(); | ||
return true; | ||
} | ||
|
||
QNetworkReply *QgsNetworkContentFetcherTask::reply() | ||
{ | ||
return mFetcher ? mFetcher->reply() : nullptr; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/*************************************************************************** | ||
qgsnetworkcontentfetchertask.h | ||
------------------- | ||
begin : March, 2018 | ||
copyright : (C) 2018 by Nyall Dawson | ||
email : nyall dot dawson at gmail dot com | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
|
||
#ifndef QGSNETWORKCONTENTFETCHERTASK_H | ||
#define QGSNETWORKCONTENTFETCHERTASK_H | ||
|
||
#include "qgstaskmanager.h" | ||
#include "qgis_core.h" | ||
#include <QNetworkRequest> | ||
|
||
class QgsNetworkContentFetcher; | ||
class QNetworkReply; | ||
|
||
/** | ||
* \class QgsNetworkContentFetcherTask | ||
* \ingroup core | ||
* \brief Handles HTTP network content fetching in a background task. | ||
* | ||
* Provides a simple method for fetching remote HTTP content in a QgsTask. | ||
* Url redirects are automatically handled. | ||
* | ||
* After constructing a QgsNetworkContentFetcherTask, callers should | ||
* connect to the QgsNetworkContentFetcherTask::fetched signal. They can | ||
* then safely access the network reply() from the connected slot | ||
* without danger of the task being first removed by the QgsTaskManager. | ||
* | ||
* \see QgsNetworkContentFetcher | ||
* | ||
* \since QGIS 3.2 | ||
*/ | ||
class CORE_EXPORT QgsNetworkContentFetcherTask : public QgsTask | ||
{ | ||
Q_OBJECT | ||
|
||
public: | ||
|
||
/** | ||
* Constructor for a QgsNetworkContentFetcherTask which fetches | ||
* the specified \a url. | ||
*/ | ||
QgsNetworkContentFetcherTask( const QUrl &url ); | ||
|
||
/** | ||
* Constructor for a QgsNetworkContentFetcherTask which fetches | ||
* the specified network \a request. | ||
*/ | ||
QgsNetworkContentFetcherTask( const QNetworkRequest &request ); | ||
|
||
~QgsNetworkContentFetcherTask(); | ||
|
||
bool run() override; | ||
|
||
/** | ||
* Returns the network reply. Ownership is not transferred. | ||
* | ||
* May return nullptr if the request has not yet completed. | ||
*/ | ||
QNetworkReply *reply(); | ||
|
||
signals: | ||
|
||
/** | ||
* Emitted when the network content has been fetched, regardless | ||
* of whether the fetch was successful or not. | ||
* | ||
* Users of QgsNetworkContentFetcherTask should connect to this signal, | ||
* and from the associated slot they can then safely access the network reply() | ||
* without danger of the task being first removed by the QgsTaskManager. | ||
*/ | ||
void fetched(); | ||
|
||
private: | ||
|
||
QNetworkRequest mRequest; | ||
QgsNetworkContentFetcher *mFetcher = nullptr; | ||
|
||
}; | ||
|
||
#endif //QGSNETWORKCONTENTFETCHERTASK_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.