From 6953aec5911d36c44ecdca06f12b81fa3b7dee4b Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 19 Mar 2025 13:09:59 +1000 Subject: [PATCH] Just require ints instead of QNetworkAccessManager::Operation enum The sip conversion code fails with enums under qt 6 --- .../network/qgsnetworkaccessmanager.sip.in | 6 +++--- .../network/qgsnetworkaccessmanager.sip.in | 6 +++--- src/core/network/qgsnetworkaccessmanager.cpp | 10 ++++++---- src/core/network/qgsnetworkaccessmanager.h | 8 ++++---- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/python/PyQt6/core/auto_generated/network/qgsnetworkaccessmanager.sip.in b/python/PyQt6/core/auto_generated/network/qgsnetworkaccessmanager.sip.in index 07d43442dc0..e87eb516407 100644 --- a/python/PyQt6/core/auto_generated/network/qgsnetworkaccessmanager.sip.in +++ b/python/PyQt6/core/auto_generated/network/qgsnetworkaccessmanager.sip.in @@ -394,14 +394,14 @@ It should return the desired operation and request data as a tuple, transforming QString id; Py_XINCREF( a0 ); Py_BEGIN_ALLOW_THREADS - id = QgsNetworkAccessManager::setAdvancedRequestPreprocessor( [a0]( QNetworkRequest *reqArg, QNetworkAccessManager::Operation &op, QByteArray *data ) + id = QgsNetworkAccessManager::setAdvancedRequestPreprocessor( [a0]( QNetworkRequest *reqArg, int &op, QByteArray *data ) { SIP_BLOCK_THREADS PyObject *requestObj = sipConvertFromType( reqArg, sipType_QNetworkRequest, NULL ); PyObject *postDataObj = sipConvertFromType( new QByteArray( *data ), sipType_QByteArray, Py_None ); - PyObject *result = sipCallMethod( NULL, a0, "RiR", requestObj, static_cast( op ), postDataObj ); + PyObject *result = sipCallMethod( NULL, a0, "RiR", requestObj, op, postDataObj ); Py_XDECREF( requestObj ); Py_XDECREF( postDataObj ); @@ -412,7 +412,7 @@ It should return the desired operation and request data as a tuple, transforming PyObject *opObj = PyTuple_GetItem( result, 0 ); if ( opObj && PyLong_Check( opObj ) ) { - op = static_cast( PyLong_AsLong( opObj ) ); + op = static_cast( PyLong_AsLong( opObj ) ); } PyObject *dataObj = PyTuple_GetItem( result, 1 ); if ( dataObj && dataObj != Py_None ) diff --git a/python/core/auto_generated/network/qgsnetworkaccessmanager.sip.in b/python/core/auto_generated/network/qgsnetworkaccessmanager.sip.in index 2aeebb170e6..85d7f2741f5 100644 --- a/python/core/auto_generated/network/qgsnetworkaccessmanager.sip.in +++ b/python/core/auto_generated/network/qgsnetworkaccessmanager.sip.in @@ -394,14 +394,14 @@ It should return the desired operation and request data as a tuple, transforming QString id; Py_XINCREF( a0 ); Py_BEGIN_ALLOW_THREADS - id = QgsNetworkAccessManager::setAdvancedRequestPreprocessor( [a0]( QNetworkRequest *reqArg, QNetworkAccessManager::Operation &op, QByteArray *data ) + id = QgsNetworkAccessManager::setAdvancedRequestPreprocessor( [a0]( QNetworkRequest *reqArg, int &op, QByteArray *data ) { SIP_BLOCK_THREADS PyObject *requestObj = sipConvertFromType( reqArg, sipType_QNetworkRequest, NULL ); PyObject *postDataObj = sipConvertFromType( new QByteArray( *data ), sipType_QByteArray, Py_None ); - PyObject *result = sipCallMethod( NULL, a0, "RiR", requestObj, static_cast( op ), postDataObj ); + PyObject *result = sipCallMethod( NULL, a0, "RiR", requestObj, op, postDataObj ); Py_XDECREF( requestObj ); Py_XDECREF( postDataObj ); @@ -412,7 +412,7 @@ It should return the desired operation and request data as a tuple, transforming PyObject *opObj = PyTuple_GetItem( result, 0 ); if ( opObj && PyLong_Check( opObj ) ) { - op = static_cast( PyLong_AsLong( opObj ) ); + op = static_cast( PyLong_AsLong( opObj ) ); } PyObject *dataObj = PyTuple_GetItem( result, 1 ); if ( dataObj && dataObj != Py_None ) diff --git a/src/core/network/qgsnetworkaccessmanager.cpp b/src/core/network/qgsnetworkaccessmanager.cpp index 5acf05e8910..f9c99df2c11 100644 --- a/src/core/network/qgsnetworkaccessmanager.cpp +++ b/src/core/network/qgsnetworkaccessmanager.cpp @@ -57,7 +57,7 @@ const QgsSettingsEntryInteger *QgsNetworkAccessManager::settingsNetworkTimeout = QgsNetworkAccessManager *QgsNetworkAccessManager::sMainNAM = nullptr; static std::vector< std::pair< QString, std::function< void( QNetworkRequest * ) > > > sCustomPreprocessors; -static std::vector< std::pair< QString, std::function< void( QNetworkRequest *, QNetworkAccessManager::Operation &op, QByteArray *data ) > > > sCustomAdvancedPreprocessors; +static std::vector< std::pair< QString, std::function< void( QNetworkRequest *, int &op, QByteArray *data ) > > > sCustomAdvancedPreprocessors; static std::vector< std::pair< QString, std::function< void( const QNetworkRequest &, QNetworkReply * ) > > > sCustomReplyPreprocessors; /// @cond PRIVATE @@ -357,7 +357,9 @@ QNetworkReply *QgsNetworkAccessManager::createRequest( QNetworkAccessManager::Op for ( const auto &preprocessor : sCustomAdvancedPreprocessors ) { - preprocessor.second( pReq, op, &content ); + int intOp = static_cast< int >( op ); + preprocessor.second( pReq, intOp, &content ); + op = static_cast< QNetworkAccessManager::Operation >( intOp ); } emit requestAboutToBeCreated( QgsNetworkRequestParameters( op, req, requestId, content ) ); @@ -835,14 +837,14 @@ bool QgsNetworkAccessManager::removeRequestPreprocessor( const QString &id ) bool QgsNetworkAccessManager::removeAdvancedRequestPreprocessor( const QString &id ) { const size_t prevCount = sCustomAdvancedPreprocessors.size(); - sCustomAdvancedPreprocessors.erase( std::remove_if( sCustomAdvancedPreprocessors.begin(), sCustomAdvancedPreprocessors.end(), [id]( std::pair< QString, std::function< void( QNetworkRequest *, QNetworkAccessManager::Operation &, QByteArray * ) > > &a ) + sCustomAdvancedPreprocessors.erase( std::remove_if( sCustomAdvancedPreprocessors.begin(), sCustomAdvancedPreprocessors.end(), [id]( std::pair< QString, std::function< void( QNetworkRequest *, int &, QByteArray * ) > > &a ) { return a.first == id; } ), sCustomAdvancedPreprocessors.end() ); return prevCount != sCustomAdvancedPreprocessors.size(); } -QString QgsNetworkAccessManager::setAdvancedRequestPreprocessor( const std::function &processor ) +QString QgsNetworkAccessManager::setAdvancedRequestPreprocessor( const std::function &processor ) { QString id = QUuid::createUuid().toString(); sCustomAdvancedPreprocessors.emplace_back( std::make_pair( id, processor ) ); diff --git a/src/core/network/qgsnetworkaccessmanager.h b/src/core/network/qgsnetworkaccessmanager.h index 1e04fe0b77d..226f8bbbf64 100644 --- a/src/core/network/qgsnetworkaccessmanager.h +++ b/src/core/network/qgsnetworkaccessmanager.h @@ -583,7 +583,7 @@ class CORE_EXPORT QgsNetworkAccessManager : public QNetworkAccessManager * \since QGIS 3.44 */ #ifndef SIP_RUN - static QString setAdvancedRequestPreprocessor( const std::function< void( QNetworkRequest *, QNetworkAccessManager::Operation &op, QByteArray *data )> &processor ); + static QString setAdvancedRequestPreprocessor( const std::function< void( QNetworkRequest *, int &op, QByteArray *data )> &processor ); #else static QString setAdvancedRequestPreprocessor( SIP_PYCALLABLE / AllowNone / ); % MethodCode @@ -591,14 +591,14 @@ class CORE_EXPORT QgsNetworkAccessManager : public QNetworkAccessManager QString id; Py_XINCREF( a0 ); Py_BEGIN_ALLOW_THREADS - id = QgsNetworkAccessManager::setAdvancedRequestPreprocessor( [a0]( QNetworkRequest *reqArg, QNetworkAccessManager::Operation &op, QByteArray *data ) + id = QgsNetworkAccessManager::setAdvancedRequestPreprocessor( [a0]( QNetworkRequest *reqArg, int &op, QByteArray *data ) { SIP_BLOCK_THREADS PyObject *requestObj = sipConvertFromType( reqArg, sipType_QNetworkRequest, NULL ); PyObject *postDataObj = sipConvertFromType( new QByteArray( *data ), sipType_QByteArray, Py_None ); - PyObject *result = sipCallMethod( NULL, a0, "RiR", requestObj, static_cast( op ), postDataObj ); + PyObject *result = sipCallMethod( NULL, a0, "RiR", requestObj, op, postDataObj ); Py_XDECREF( requestObj ); Py_XDECREF( postDataObj ); @@ -609,7 +609,7 @@ class CORE_EXPORT QgsNetworkAccessManager : public QNetworkAccessManager PyObject *opObj = PyTuple_GetItem( result, 0 ); if ( opObj && PyLong_Check( opObj ) ) { - op = static_cast( PyLong_AsLong( opObj ) ); + op = static_cast( PyLong_AsLong( opObj ) ); } PyObject *dataObj = PyTuple_GetItem( result, 1 ); if ( dataObj && dataObj != Py_None )