diff --git a/libraries/networking/src/NetworkAccessManager.cpp b/libraries/networking/src/NetworkAccessManager.cpp index a33817b50d..7c45dc69d5 100644 --- a/libraries/networking/src/NetworkAccessManager.cpp +++ b/libraries/networking/src/NetworkAccessManager.cpp @@ -9,6 +9,9 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include +#include + #include "NetworkAccessManager.h" NetworkAccessManager& NetworkAccessManager::getInstance() { @@ -17,4 +20,114 @@ NetworkAccessManager& NetworkAccessManager::getInstance() { } NetworkAccessManager::NetworkAccessManager() { -} \ No newline at end of file +} + +QNetworkReply* NetworkAccessManager::get(const QNetworkRequest& request) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "get", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request)); + return result; + } + return QNetworkAccessManager::get(request); +} + +QNetworkReply* NetworkAccessManager::head(const QNetworkRequest& request) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "head", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request)); + return result; + } + return QNetworkAccessManager::head(request); +} + +QNetworkReply* NetworkAccessManager::post(const QNetworkRequest& request, QIODevice* data) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "post", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request), + Q_ARG(QIODevice*, data)); + return result; + } + return QNetworkAccessManager::post(request, data); +} + +QNetworkReply* NetworkAccessManager::post(const QNetworkRequest& request, const QByteArray& data) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "post", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request), + Q_ARG(const QByteArray, data)); + return result; + } + return QNetworkAccessManager::post(request, data); +} + +QNetworkReply* NetworkAccessManager::post(const QNetworkRequest& request, QHttpMultiPart* multiPart) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "post", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request), + Q_ARG(QHttpMultiPart*, multiPart)); + return result; + } + return QNetworkAccessManager::post(request, multiPart); +} + +QNetworkReply* NetworkAccessManager::put(const QNetworkRequest& request, QIODevice* data) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "put", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request), + Q_ARG(QIODevice*, data)); + return result; + } + return QNetworkAccessManager::put(request, data); +} + +QNetworkReply* NetworkAccessManager::put(const QNetworkRequest& request, QHttpMultiPart* multiPart) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "put", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request), + Q_ARG(QHttpMultiPart*, multiPart)); + return result; + } + return QNetworkAccessManager::put(request, multiPart); +} + +QNetworkReply* NetworkAccessManager::put(const QNetworkRequest & request, const QByteArray & data) { + if (QThread::currentThread() != thread()) { + QNetworkReply* result; + QMetaObject::invokeMethod(this, + "put", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QNetworkReply*, result), + Q_ARG(const QNetworkRequest, request), + Q_ARG(const QByteArray, data)); + return result; + } + return QNetworkAccessManager::put(request, data); +} diff --git a/libraries/networking/src/NetworkAccessManager.h b/libraries/networking/src/NetworkAccessManager.h index c7cc74340a..b1df269022 100644 --- a/libraries/networking/src/NetworkAccessManager.h +++ b/libraries/networking/src/NetworkAccessManager.h @@ -13,12 +13,23 @@ #define hifi_NetworkAccessManager_h #include +#include +#include +/// Wrapper around QNetworkAccessManager wo that we only use one instance class NetworkAccessManager : public QNetworkAccessManager { Q_OBJECT public: static NetworkAccessManager& getInstance(); + Q_INVOKABLE QNetworkReply* get(const QNetworkRequest& request); + Q_INVOKABLE QNetworkReply* head(const QNetworkRequest& request); + Q_INVOKABLE QNetworkReply* post(const QNetworkRequest& request, QIODevice* data); + Q_INVOKABLE QNetworkReply* post(const QNetworkRequest& request, const QByteArray& data); + Q_INVOKABLE QNetworkReply* post(const QNetworkRequest& request, QHttpMultiPart* multiPart); + Q_INVOKABLE QNetworkReply* put(const QNetworkRequest& request, QIODevice* data); + Q_INVOKABLE QNetworkReply* put(const QNetworkRequest& request, QHttpMultiPart* multiPart); + Q_INVOKABLE QNetworkReply* put(const QNetworkRequest& request, const QByteArray& data); private: NetworkAccessManager();