Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsnetworkreply.h 3 : : ----------------- 4 : : begin : November 2018 5 : : copyright : (C) 2018 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : #ifndef QGSNETWORKREPLY_H 16 : : #define QGSNETWORKREPLY_H 17 : : 18 : : #include "qgis_core.h" 19 : : 20 : : #include <QNetworkReply> 21 : : #include <QByteArray> 22 : : 23 : : /** 24 : : * \brief Encapsulates a network reply within a container which is inexpensive to copy and safe to pass between threads. 25 : : * \ingroup core 26 : : * \since QGIS 3.6 27 : : */ 28 : 0 : class CORE_EXPORT QgsNetworkReplyContent 29 : : { 30 : : public: 31 : : 32 : : /** 33 : : * Default constructor for an empty reply. 34 : : */ 35 : 0 : QgsNetworkReplyContent() = default; 36 : : 37 : : /** 38 : : * Constructor for QgsNetworkReplyContent, populated from the specified \a reply. 39 : : */ 40 : : explicit QgsNetworkReplyContent( QNetworkReply *reply ); 41 : : 42 : : /** 43 : : * Clears the reply, resetting it back to a default, empty reply. 44 : : */ 45 : : void clear(); 46 : : 47 : : /** 48 : : * Returns the attribute associated with the \a code. If the attribute has not been set, it returns an 49 : : * invalid QVariant. 50 : : * 51 : : * You can expect the default values listed in QNetworkRequest::Attribute to be 52 : : * applied to the values returned by this function. 53 : : * 54 : : * \see attributes() 55 : : */ 56 : : QVariant attribute( QNetworkRequest::Attribute code ) const; 57 : : 58 : : #ifndef SIP_RUN 59 : : 60 : : /** 61 : : * Returns a list of valid attributes received in the reply. 62 : : * 63 : : * \see attribute() 64 : : * \note Not available in Python bindings 65 : : */ 66 : : QMap< QNetworkRequest::Attribute, QVariant > attributes() const { return mAttributes; } 67 : : #endif 68 : : 69 : : /** 70 : : * Returns the reply's error message, or QNetworkReply::NoError if no 71 : : * error was encountered. 72 : : * 73 : : * \see errorString() 74 : : */ 75 : : QNetworkReply::NetworkError error() const 76 : : { 77 : : return mError; 78 : : } 79 : : 80 : : /** 81 : : * Returns the error text for the reply, or an empty string if no 82 : : * error was encountered. 83 : : * 84 : : * \see error() 85 : : */ 86 : : QString errorString() const 87 : : { 88 : : return mErrorString; 89 : : } 90 : : 91 : : #ifndef SIP_RUN 92 : : typedef QPair<QByteArray, QByteArray> RawHeaderPair; 93 : : 94 : : /** 95 : : * Returns the list of raw header pairs in the reply. 96 : : * \see hasRawHeader() 97 : : * \see rawHeaderList() 98 : : * \see rawHeader() 99 : : * \note Not available in Python bindings 100 : : */ 101 : 0 : const QList<RawHeaderPair> &rawHeaderPairs() const 102 : : { 103 : 0 : return mRawHeaderPairs; 104 : : } 105 : : #endif 106 : : 107 : : /** 108 : : * Returns TRUE if the reply contains a header with the specified \a headerName. 109 : : * \see rawHeaderPairs() 110 : : * \see rawHeaderList() 111 : : * \see rawHeader() 112 : : */ 113 : : bool hasRawHeader( const QByteArray &headerName ) const; 114 : : 115 : : /** 116 : : * Returns a list of raw header names contained within the reply. 117 : : * \see rawHeaderPairs() 118 : : * \see hasRawHeader() 119 : : * \see rawHeader() 120 : : */ 121 : : QList<QByteArray> rawHeaderList() const; 122 : : 123 : : /** 124 : : * Returns the content of the header with the specified \a headerName, or an 125 : : * empty QByteArray if the specified header was not found in the reply. 126 : : * \see rawHeaderPairs() 127 : : * \see hasRawHeader() 128 : : * \see rawHeaderList() 129 : : */ 130 : : QByteArray rawHeader( const QByteArray &headerName ) const; 131 : : 132 : : /** 133 : : * Returns the unique ID identifying the original request which this response was formed from. 134 : : */ 135 : : int requestId() const { return mRequestId; } 136 : : 137 : : /** 138 : : * Returns the original network request. 139 : : */ 140 : : QNetworkRequest request() const { return mRequest; } 141 : : 142 : : /** 143 : : * Sets the reply content. This is not done by default, as reading network reply content 144 : : * can only be done once. 145 : : * 146 : : * \see content() 147 : : */ 148 : 0 : void setContent( const QByteArray &content ) { mContent = content; } 149 : : 150 : : /** 151 : : * Returns the reply content. This is not available by default, as reading network reply content 152 : : * can only be done once. 153 : : * 154 : : * Blocking network requests (see QgsBlockingNetworkRequest) will automatically populate this content. 155 : : * 156 : : * \see setContent() 157 : : */ 158 : 0 : QByteArray content() const { return mContent; } 159 : : 160 : : private: 161 : : 162 : 0 : QNetworkReply::NetworkError mError = QNetworkReply::NoError; 163 : : QString mErrorString; 164 : : QList<RawHeaderPair> mRawHeaderPairs; 165 : : QMap< QNetworkRequest::Attribute, QVariant > mAttributes; 166 : 0 : int mRequestId = -1; 167 : : QNetworkRequest mRequest; 168 : : QByteArray mContent; 169 : : }; 170 : : 171 : : #endif // QGSNETWORKREPLY_H