NetworkQuery: Support more operations

Make it possible to PUT, POST and DELETE.
Add setWriteData() method, to be used with PUT and POST.

Change-Id: I99da38b60120b7efdab391db9b4d638f17d555df
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2024-02-13 17:45:38 +01:00
parent 322dcd2c45
commit fc9863c768
2 changed files with 20 additions and 1 deletions

View File

@@ -19,7 +19,20 @@ void NetworkQuery::start()
emit done(DoneResult::Error);
return;
}
m_reply.reset(m_manager->get(m_request));
switch (m_operation) {
case NetworkOperation::Get:
m_reply.reset(m_manager->get(m_request));
break;
case NetworkOperation::Put:
m_reply.reset(m_manager->put(m_request, m_writeData));
break;
case NetworkOperation::Post:
m_reply.reset(m_manager->post(m_request, m_writeData));
break;
case NetworkOperation::Delete:
m_reply.reset(m_manager->deleteResource(m_request));
break;
}
connect(m_reply.get(), &QNetworkReply::finished, this, [this] {
disconnect(m_reply.get(), &QNetworkReply::finished, this, nullptr);
emit done(toDoneResult(m_reply->error() == QNetworkReply::NoError));

View File

@@ -22,6 +22,8 @@ namespace Tasking {
// is independent on Qt::Network.
// Possibly, it could be placed inside Qt::Network library, as a wrapper around QNetworkReply.
enum class NetworkOperation { Get, Put, Post, Delete };
class TASKING_EXPORT NetworkQuery final : public QObject
{
Q_OBJECT
@@ -29,6 +31,8 @@ class TASKING_EXPORT NetworkQuery final : public QObject
public:
~NetworkQuery();
void setRequest(const QNetworkRequest &request) { m_request = request; }
void setOperation(NetworkOperation operation) { m_operation = operation; }
void setWriteData(const QByteArray &data) { m_writeData = data; }
void setNetworkAccessManager(QNetworkAccessManager *manager) { m_manager = manager; }
QNetworkReply *reply() const { return m_reply.get(); }
void start();
@@ -39,6 +43,8 @@ signals:
private:
QNetworkRequest m_request;
NetworkOperation m_operation = NetworkOperation::Get;
QByteArray m_writeData; // Used by Put and Post
QNetworkAccessManager *m_manager = nullptr;
std::unique_ptr<QNetworkReply> m_reply;
};