Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsnetworkcontentfetchertask.h 3 : : ------------------- 4 : : begin : March, 2018 5 : : copyright : (C) 2018 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : 8 : : ***************************************************************************/ 9 : : 10 : : /*************************************************************************** 11 : : * * 12 : : * This program is free software; you can redistribute it and/or modify * 13 : : * it under the terms of the GNU General Public License as published by * 14 : : * the Free Software Foundation; either version 2 of the License, or * 15 : : * (at your option) any later version. * 16 : : * * 17 : : ***************************************************************************/ 18 : : 19 : : 20 : : #ifndef QGSNETWORKCONTENTFETCHERTASK_H 21 : : #define QGSNETWORKCONTENTFETCHERTASK_H 22 : : 23 : : #include "qgstaskmanager.h" 24 : : #include "qgis_core.h" 25 : : #include <QNetworkRequest> 26 : : 27 : : class QgsNetworkContentFetcher; 28 : : class QNetworkReply; 29 : : 30 : : /** 31 : : * \class QgsNetworkContentFetcherTask 32 : : * \ingroup core 33 : : * \brief Handles HTTP network content fetching in a background task. 34 : : * 35 : : * Provides a simple method for fetching remote HTTP content in a QgsTask. 36 : : * Url redirects are automatically handled. 37 : : * 38 : : * After constructing a QgsNetworkContentFetcherTask, callers should 39 : : * connect to the QgsNetworkContentFetcherTask::fetched signal. They can 40 : : * then safely access the network reply() from the connected slot 41 : : * without danger of the task being first removed by the QgsTaskManager. 42 : : * 43 : : * \see QgsNetworkContentFetcher 44 : : * 45 : : * \since QGIS 3.2 46 : : */ 47 : : class CORE_EXPORT QgsNetworkContentFetcherTask : public QgsTask 48 : : { 49 : 0 : Q_OBJECT 50 : : 51 : : public: 52 : : 53 : : /** 54 : : * Constructor for a QgsNetworkContentFetcherTask which fetches 55 : : * the specified \a url. 56 : : * 57 : : * Optionally, authentication configuration can be set via the \a authcfg argument. 58 : : */ 59 : : QgsNetworkContentFetcherTask( const QUrl &url, const QString &authcfg = QString(), QgsTask::Flags flags = QgsTask::CanCancel ); 60 : : 61 : : /** 62 : : * Constructor for a QgsNetworkContentFetcherTask which fetches 63 : : * the specified network \a request. 64 : : * 65 : : * Optionally, authentication configuration can be set via the \a authcfg argument. 66 : : */ 67 : : QgsNetworkContentFetcherTask( const QNetworkRequest &request, const QString &authcfg = QString(), QgsTask::Flags flags = QgsTask::CanCancel ); 68 : : 69 : : ~QgsNetworkContentFetcherTask() override; 70 : : 71 : : bool run() override; 72 : : void cancel() override; 73 : : 74 : : /** 75 : : * Returns the network reply. Ownership is not transferred. 76 : : * 77 : : * May return NULLPTR if the request has not yet completed. 78 : : * 79 : : * \warning This should only be accessed from a slot connected directly to 80 : : * the QgsNetworkContentFetcherTask::fetched() signal. 81 : : */ 82 : : QNetworkReply *reply(); 83 : : 84 : : /** 85 : : * Returns the fetched content as a string 86 : : * 87 : : * \warning This should only be accessed from a slot connected directly to 88 : : * the QgsNetworkContentFetcherTask::fetched() signal. 89 : : * 90 : : * \since QGIS 3.10 91 : : */ 92 : : QString contentAsString() const; 93 : : 94 : : signals: 95 : : 96 : : /** 97 : : * Emitted when the network content has been fetched, regardless 98 : : * of whether the fetch was successful or not. 99 : : * 100 : : * Users of QgsNetworkContentFetcherTask should connect to this signal, 101 : : * and from the associated slot they can then safely access the network reply() 102 : : * without danger of the task being first removed by the QgsTaskManager. 103 : : */ 104 : : void fetched(); 105 : : 106 : : private: 107 : : 108 : : QNetworkRequest mRequest; 109 : : QString mAuthcfg; 110 : : QgsNetworkContentFetcher *mFetcher = nullptr; 111 : : 112 : : }; 113 : : 114 : : #endif //QGSNETWORKCONTENTFETCHERTASK_H