-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Encapsulates a network reply within a container which is inexpensive to copy and safe to pass around between threads. The default Qt QNetworkReply class is a QObject, which prevents it from being copied and passed between threads. This class grabs all the useful information from a QNetworkReply, allowing the reply's content to be stored indefinetly without concern for the lifetime of the QNetworkReply object itself.
- Loading branch information
1 parent
a2b5008
commit e4959a6
Showing
5 changed files
with
291 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/qgsnetworkreply.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ | ||
|
||
|
||
|
||
class QgsNetworkReplyContent | ||
{ | ||
%Docstring | ||
Encapsulates a network reply within a container which is inexpensive to copy and safe to pass between threads. | ||
|
||
.. versionadded:: 3.6 | ||
%End | ||
|
||
%TypeHeaderCode | ||
#include "qgsnetworkreply.h" | ||
%End | ||
public: | ||
|
||
QgsNetworkReplyContent(); | ||
%Docstring | ||
Default constructor for an empty reply. | ||
%End | ||
|
||
explicit QgsNetworkReplyContent( QNetworkReply *reply ); | ||
%Docstring | ||
Constructor for QgsNetworkReplyContent, populated from the specified ``reply``. | ||
%End | ||
|
||
void clear(); | ||
%Docstring | ||
Clears the reply, resetting it back to a default, empty reply. | ||
%End | ||
|
||
QByteArray content() const; | ||
%Docstring | ||
Returns the raw reply content. | ||
%End | ||
|
||
QNetworkReply::NetworkError error() const; | ||
%Docstring | ||
Returns the reply's error message, or QNetworkReply.NoError if no | ||
error was encountered. | ||
|
||
.. seealso:: :py:func:`errorString` | ||
%End | ||
|
||
QString errorString() const; | ||
%Docstring | ||
Returns the error text for the reply, or an empty string if no | ||
error was encountered. | ||
|
||
.. seealso:: :py:func:`error` | ||
%End | ||
|
||
|
||
bool hasRawHeader( const QByteArray &headerName ) const; | ||
%Docstring | ||
Returns true if the reply contains a header with the specified ``headerName``. | ||
|
||
.. seealso:: :py:func:`rawHeaderPairs` | ||
|
||
.. seealso:: :py:func:`rawHeaderList` | ||
|
||
.. seealso:: :py:func:`rawHeader` | ||
%End | ||
|
||
QList<QByteArray> rawHeaderList() const; | ||
%Docstring | ||
Returns a list of raw header names contained within the reply. | ||
|
||
.. seealso:: :py:func:`rawHeaderPairs` | ||
|
||
.. seealso:: :py:func:`hasRawHeader` | ||
|
||
.. seealso:: :py:func:`rawHeader` | ||
%End | ||
|
||
QByteArray rawHeader( const QByteArray &headerName ) const; | ||
%Docstring | ||
Returns the content of the header with the specified ``headerName``, or an | ||
empty QByteArray if the specified header was not found in the reply. | ||
|
||
.. seealso:: :py:func:`rawHeaderPairs` | ||
|
||
.. seealso:: :py:func:`hasRawHeader` | ||
|
||
.. seealso:: :py:func:`rawHeaderList` | ||
%End | ||
|
||
}; | ||
|
||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/qgsnetworkreply.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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/*************************************************************************** | ||
qgsnetworkreply.cpp | ||
------------------- | ||
begin : November 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 "qgsnetworkreply.h" | ||
#include <QNetworkReply> | ||
|
||
QgsNetworkReplyContent::QgsNetworkReplyContent( QNetworkReply *reply ) | ||
: mContent( reply->readAll() ) | ||
, mError( reply->error() ) | ||
, mErrorString( reply->errorString() ) | ||
, mRawHeaderPairs( reply->rawHeaderPairs() ) | ||
{} | ||
|
||
void QgsNetworkReplyContent::clear() | ||
{ | ||
*this = QgsNetworkReplyContent(); | ||
} | ||
|
||
bool QgsNetworkReplyContent::hasRawHeader( const QByteArray &headerName ) const | ||
{ | ||
for ( auto &header : mRawHeaderPairs ) | ||
{ | ||
if ( header.first == headerName ) | ||
return true; | ||
} | ||
return false; | ||
} | ||
|
||
QList<QByteArray> QgsNetworkReplyContent::rawHeaderList() const | ||
{ | ||
QList< QByteArray > res; | ||
res.reserve( mRawHeaderPairs.length() ); | ||
for ( auto &header : mRawHeaderPairs ) | ||
{ | ||
res << header.first; | ||
} | ||
return res; | ||
} | ||
|
||
QByteArray QgsNetworkReplyContent::rawHeader( const QByteArray &headerName ) const | ||
{ | ||
for ( auto &header : mRawHeaderPairs ) | ||
{ | ||
if ( header.first == headerName ) | ||
return header.second; | ||
} | ||
return QByteArray(); | ||
} |
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,125 @@ | ||
/*************************************************************************** | ||
qgsnetworkreply.h | ||
----------------- | ||
begin : November 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 QGSNETWORKREPLY_H | ||
#define QGSNETWORKREPLY_H | ||
|
||
#include "qgis_core.h" | ||
|
||
#include <QNetworkReply> | ||
|
||
/** | ||
* Encapsulates a network reply within a container which is inexpensive to copy and safe to pass between threads. | ||
* \ingroup core | ||
* \since QGIS 3.6 | ||
*/ | ||
class CORE_EXPORT QgsNetworkReplyContent | ||
{ | ||
public: | ||
|
||
/** | ||
* Default constructor for an empty reply. | ||
*/ | ||
QgsNetworkReplyContent() = default; | ||
|
||
/** | ||
* Constructor for QgsNetworkReplyContent, populated from the specified \a reply. | ||
*/ | ||
explicit QgsNetworkReplyContent( QNetworkReply *reply ); | ||
|
||
/** | ||
* Clears the reply, resetting it back to a default, empty reply. | ||
*/ | ||
void clear(); | ||
|
||
/** | ||
* Returns the raw reply content. | ||
*/ | ||
QByteArray content() const | ||
{ | ||
return mContent; | ||
} | ||
|
||
/** | ||
* Returns the reply's error message, or QNetworkReply::NoError if no | ||
* error was encountered. | ||
* | ||
* \see errorString() | ||
*/ | ||
QNetworkReply::NetworkError error() const | ||
{ | ||
return mError; | ||
} | ||
|
||
/** | ||
* Returns the error text for the reply, or an empty string if no | ||
* error was encountered. | ||
* | ||
* \see error() | ||
*/ | ||
QString errorString() const | ||
{ | ||
return mErrorString; | ||
} | ||
|
||
#ifndef SIP_RUN | ||
typedef QPair<QByteArray, QByteArray> RawHeaderPair; | ||
|
||
/** | ||
* Returns the list of raw header pairs in the reply. | ||
* \see hasRawHeader() | ||
* \see rawHeaderList() | ||
* \see rawHeader() | ||
* \note Not available in Python bindings | ||
*/ | ||
const QList<RawHeaderPair> &rawHeaderPairs() const | ||
{ | ||
return mRawHeaderPairs; | ||
} | ||
#endif | ||
|
||
/** | ||
* Returns true if the reply contains a header with the specified \a headerName. | ||
* \see rawHeaderPairs() | ||
* \see rawHeaderList() | ||
* \see rawHeader() | ||
*/ | ||
bool hasRawHeader( const QByteArray &headerName ) const; | ||
|
||
/** | ||
* Returns a list of raw header names contained within the reply. | ||
* \see rawHeaderPairs() | ||
* \see hasRawHeader() | ||
* \see rawHeader() | ||
*/ | ||
QList<QByteArray> rawHeaderList() const; | ||
|
||
/** | ||
* Returns the content of the header with the specified \a headerName, or an | ||
* empty QByteArray if the specified header was not found in the reply. | ||
* \see rawHeaderPairs() | ||
* \see hasRawHeader() | ||
* \see rawHeaderList() | ||
*/ | ||
QByteArray rawHeader( const QByteArray &headerName ) const; | ||
|
||
private: | ||
|
||
QByteArray mContent; | ||
QNetworkReply::NetworkError mError = QNetworkReply::NoError; | ||
QString mErrorString; | ||
QList<RawHeaderPair> mRawHeaderPairs; | ||
}; | ||
|
||
#endif // QGSNETWORKREPLY_H |