#include "ioutils.hpp" #include #include #include #include #include QNetworkAccessManager ioutils::networkManager; void addLogEntry(QNetworkReply *reply, QByteArray data) { requestlogging::RequestContext ctx; ctx.reply = reply; ctx.response = data; requestlogging::addEntry(ctx); } void ioutils::postMultipart(QUrl target, QList> headers, QHttpMultiPart *body, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { if (header.first.toLower() != "content-type") req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(QJsonDocument::fromJson(data), data, reply); delete reply; }); } void ioutils::postMultipartData(QUrl target, QList> headers, QHttpMultiPart *body, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { if (header.first.toLower() != "content-type") req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(data, reply); delete reply; }); } void ioutils::getJson(QUrl target, QList> headers, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.get(req); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(QJsonDocument::fromJson(data), data, reply); reply->deleteLater(); }); } void ioutils::postJson(QUrl target, QList> headers, QByteArray body, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(QJsonDocument::fromJson(data), data, reply); delete reply; }); } void ioutils::getData(QUrl target, QList> headers, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.get(req); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(data, reply); delete reply; }); } void ioutils::postData(QUrl target, QList> headers, QByteArray body, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(data, reply); delete reply; }); } QString ioutils::methodString(QNetworkAccessManager::Operation operation) { switch (operation) { case QNetworkAccessManager::GetOperation: return "GET"; case QNetworkAccessManager::PostOperation: return "POST"; case QNetworkAccessManager::PutOperation: return "PUT"; case QNetworkAccessManager::DeleteOperation: return "DELETE"; case QNetworkAccessManager::HeadOperation: return "HEAD"; default: // return "Dunno"; return "Unknown"; } }