Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
New class QgsNetworkReplyContent, which encapsulates the useful
information from a QNetworkReply in a container which is safe and cheap to pass between threads (QNetworkReplys are QObject based, so not safe to access or pass between threads) Use this new class in a thread safe QgsNetworkAccessManager::finished signal, which is fired on the main thread QgsNetworkAccessManager instance when responses are finished from any thread
- Loading branch information
1 parent
397194a
commit b5379ce
Showing
9 changed files
with
375 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
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,110 @@ | ||
/************************************************************************ | ||
* 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 | ||
|
||
QVariant attribute( QNetworkRequest::Attribute code ) const; | ||
%Docstring | ||
Returns the attribute associated with the ``code``. If the attribute has not been set, it returns an | ||
invalid QVariant. | ||
|
||
You can expect the default values listed in QNetworkRequest.Attribute to be | ||
applied to the values returned by this function. | ||
|
||
.. seealso:: :py:func:`attributes` | ||
%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
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,74 @@ | ||
/*************************************************************************** | ||
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 ) | ||
: mError( reply->error() ) | ||
, mErrorString( reply->errorString() ) | ||
, mRawHeaderPairs( reply->rawHeaderPairs() ) | ||
{ | ||
int maxAttribute = static_cast< int >( QNetworkRequest::RedirectPolicyAttribute ); | ||
#if QT_VERSION >= QT_VERSION_CHECK( 5, 11, 0 ) | ||
maxAttribute = static_cast< int >( QNetworkRequest::Http2DirectAttribute ); | ||
#endif | ||
for ( int i = 0; i <= maxAttribute; ++i ) | ||
{ | ||
if ( reply->attribute( static_cast< QNetworkRequest::Attribute>( i ) ).isValid() ) | ||
mAttributes[ static_cast< QNetworkRequest::Attribute>( i ) ] = reply->attribute( static_cast< QNetworkRequest::Attribute>( i ) ); | ||
} | ||
} | ||
|
||
void QgsNetworkReplyContent::clear() | ||
{ | ||
*this = QgsNetworkReplyContent(); | ||
} | ||
|
||
QVariant QgsNetworkReplyContent::attribute( QNetworkRequest::Attribute code ) const | ||
{ | ||
return mAttributes.value( code ); | ||
} | ||
|
||
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(); | ||
} |
Oops, something went wrong.