Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsnetworkcontentfetcher.h 3 : : ------------------- 4 : : begin : July, 2014 5 : : copyright : (C) 2014 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 QGSNETWORKCONTENTFETCHER_H 21 : : #define QGSNETWORKCONTENTFETCHER_H 22 : : 23 : : #include <QNetworkReply> 24 : : #include <QUrl> 25 : : 26 : : #include "qgis_core.h" 27 : : 28 : : class QTextCodec; 29 : : 30 : : /** 31 : : * \class QgsNetworkContentFetcher 32 : : * \ingroup core 33 : : * \brief HTTP network content fetcher. A simple method for fetching remote HTTP content 34 : : * and converting the content to standard formats. Url redirects are automatically 35 : : * handled. 36 : : * \see QgsNetworkContentFetcherTask 37 : : * \since QGIS 2.5 38 : : */ 39 : : class CORE_EXPORT QgsNetworkContentFetcher : public QObject 40 : : { 41 : 0 : Q_OBJECT 42 : : 43 : : public: 44 : : 45 : : /** 46 : : * Constructor for QgsNetworkContentFetcher. 47 : : */ 48 : 0 : QgsNetworkContentFetcher() = default; 49 : : 50 : : ~QgsNetworkContentFetcher() override; 51 : : 52 : : /** 53 : : * Fetches content from a remote URL and handles redirects. The finished() 54 : : * signal will be emitted when content has been fetched. 55 : : * \param url URL to fetch 56 : : * \param authcfg optional authentication configuration 57 : : */ 58 : : void fetchContent( const QUrl &url, const QString &authcfg = QString() ); 59 : : 60 : : /** 61 : : * Fetches content using a network \a request and handles redirects. The finished() 62 : : * signal will be emitted when content has been fetched. 63 : : * 64 : : * Optionally, authentication configuration can be set via the \a authcfg argument. 65 : : * 66 : : * \since QGIS 3.2 67 : : */ 68 : : void fetchContent( const QNetworkRequest &request, const QString &authcfg = QString() ); 69 : : 70 : : /** 71 : : * Returns a reference to the network reply 72 : : * \returns QNetworkReply for fetched URL content 73 : : */ 74 : : QNetworkReply *reply(); 75 : : 76 : : /** 77 : : * Returns the fetched content as a string 78 : : * \returns string containing network content 79 : : */ 80 : : QString contentAsString() const; 81 : : 82 : : /** 83 : : * Cancels any ongoing request. 84 : : * \since QGIS 3.2 85 : : */ 86 : : void cancel(); 87 : : 88 : : /** 89 : : * Returns TRUE if the fetching was canceled. 90 : : * 91 : : * \since QGIS 3.10 92 : : */ 93 : : bool wasCanceled() const; 94 : : 95 : : signals: 96 : : 97 : : /** 98 : : * Emitted when content has loaded 99 : : */ 100 : : void finished(); 101 : : 102 : : /** 103 : : * Emitted when data is received. 104 : : * \since QGIS 3.2 105 : : */ 106 : : void downloadProgress( qint64 bytesReceived, qint64 bytesTotal ); 107 : : 108 : : private: 109 : : 110 : : QString mAuthCfg; 111 : 0 : QNetworkReply *mReply = nullptr; 112 : : 113 : 0 : bool mContentLoaded = false; 114 : : 115 : 0 : bool mIsCanceled = false; 116 : : 117 : : /** 118 : : * Tries to create a text codec for decoding html content. Works around bugs in Qt's built in method. 119 : : * \param array input html byte array 120 : : * \returns QTextCodec for html content, if detected 121 : : */ 122 : : QTextCodec *codecForHtml( QByteArray &array ) const; 123 : : 124 : : private slots: 125 : : 126 : : /** 127 : : * Called when fetchUrlContent has finished loading a url. If 128 : : * result is a redirect then the redirect is fetched automatically. 129 : : */ 130 : : void contentLoaded( bool ok = true ); 131 : : 132 : : }; 133 : : 134 : : #endif