diff --git a/io/ioutils.cpp b/io/ioutils.cpp index e42000b..2d190e6 100644 --- a/io/ioutils.cpp +++ b/io/ioutils.cpp @@ -4,8 +4,37 @@ #include #include -namespace ioutils { -QNetworkAccessManager networkManager; +QNetworkAccessManager ioutils::networkManager; + +void ioutils::postMultipart(QUrl target, + QList> headers, + QHttpMultiPart *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(); + 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) { + req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); + } + QNetworkReply *reply = networkManager.post(req, body); + QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + callback(reply->readAll(), reply); + delete reply; + }); } void ioutils::getJson(QUrl target, diff --git a/io/ioutils.hpp b/io/ioutils.hpp index c2423a8..d4e50c7 100644 --- a/io/ioutils.hpp +++ b/io/ioutils.hpp @@ -16,6 +16,14 @@ void postJson(QUrl target, std::function callback); void getData(QUrl target, QList> headers, std::function callback); void postData(QUrl target, QList> headers, QByteArray body, std::function callback); +void postMultipart(QUrl target, + QList> headers, + QHttpMultiPart *body, + std::function callback); +void postMultipartData(QUrl target, + QList> headers, + QHttpMultiPart *body, + std::function callback); } #endif // IOUTILS_HPP diff --git a/uploaders/customuploader.cpp b/uploaders/customuploader.cpp index 8ee0b30..894d1ff 100644 --- a/uploaders/customuploader.cpp +++ b/uploaders/customuploader.cpp @@ -291,7 +291,7 @@ void CustomUploader::doUpload(QByteArray imgData, QString format) { } } break; case RequestFormat::MULTIPART_FORM_DATA: { - QHttpMultiPart multipart(QHttpMultiPart::FormDataType); + QHttpMultiPart *multipart = new QHttpMultiPart(QHttpMultiPart::FormDataType); auto arr = body.toArray(); for (QJsonValue val : arr) { auto valo = val.toObject(); @@ -311,12 +311,12 @@ void CustomUploader::doUpload(QByteArray imgData, QString format) { QBuffer *buffer = new QBuffer(&imgData); buffer->open(QIODevice::ReadOnly); part.setBodyDevice(buffer); - multipart.append(part); + multipart->append(part); } else { auto bdo = bd.toObject(); QJsonObject result = recurseAndReplace(bdo, imgData, mime); part.setBody(QJsonDocument::fromVariant(result.toVariantMap()).toJson()); - multipart.append(part); + multipart->append(part); } for (QString headerVal : valo.keys()) { QString str = valo[headerVal].toString(); @@ -325,6 +325,21 @@ void CustomUploader::doUpload(QByteArray imgData, QString format) { part.setRawHeader(headerVal.toLatin1(), str.toLatin1()); } } + switch (method) { + case HttpMethod::POST: + if (returnPathspec == "|") { + ioutils::postMultipartData(target, h, multipart, [&](QByteArray result, QNetworkReply *) { + QApplication::clipboard()->setText(QString::fromUtf8(result)); + notifications::notify("KShare Custom Uploader " + name(), "Copied upload result to clipboard!"); + }); + } else { + ioutils::postMultipart(target, h, multipart, [&](QJsonDocument result, QByteArray data, QNetworkReply *) { + parseResult(result, data, returnPathspec, name()); + }); + } + break; + } + return; } break; } if (limit > 0 && data.size() > limit) {