Introduced a new `NetworkService` for posting account and device data efficiently. Improved the transaction UI with styled tables and added lazy content loading. Changed screenshot handling to return JPEG data directly, and restructured device processing for better error handling and data integration.
70 lines
2.3 KiB
C++
70 lines
2.3 KiB
C++
#include "NetworkService.h"
|
|
|
|
#include <QEventLoop>
|
|
#include <QHttpPart>
|
|
#include <QNetworkReply>
|
|
#include <QJsonObject>
|
|
|
|
NetworkService::NetworkService(QObject *parent) : QObject(parent) {
|
|
}
|
|
|
|
NetworkService::~NetworkService() = default;
|
|
|
|
|
|
void NetworkService::postAccountsData() {
|
|
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
|
|
|
|
QHttpPart jsonPart;
|
|
jsonPart.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
|
|
jsonPart.setHeader(QNetworkRequest::ContentDispositionHeader, R"(form-data; name="metadata")");
|
|
|
|
jsonPart.setBody(m_json);
|
|
multiPart->append(jsonPart);
|
|
|
|
|
|
QHttpPart desktopUniqueName;
|
|
desktopUniqueName.setHeader(QNetworkRequest::ContentDispositionHeader, R"(form-data; name="desktopUniqueName")");
|
|
desktopUniqueName.setBody(m_desktopId.toUtf8());
|
|
multiPart->append(desktopUniqueName);
|
|
|
|
|
|
QHttpPart androidUniqueName;
|
|
androidUniqueName.setHeader(QNetworkRequest::ContentDispositionHeader, R"(form-data; name="androidUniqueName")");
|
|
androidUniqueName.setBody(m_deviceId.toUtf8());
|
|
multiPart->append(androidUniqueName);
|
|
|
|
QNetworkAccessManager manager; // создаём внутри потока
|
|
const QUrl url("http://localhost:9999/api/v1/account/update");
|
|
const QNetworkRequest request(url);
|
|
|
|
QNetworkReply *reply = manager.post(request, multiPart);
|
|
multiPart->setParent(reply);
|
|
|
|
QEventLoop loop;
|
|
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
|
connect(reply, &QNetworkReply::errorOccurred, [&loop](QNetworkReply::NetworkError) {
|
|
loop.quit();
|
|
});
|
|
loop.exec(); // <- здесь и запускается event-loop потока
|
|
|
|
// обрабатываем результат
|
|
if (reply->error() == QNetworkReply::NoError) {
|
|
const QByteArray raw = reply->readAll();
|
|
QJsonParseError err;
|
|
const QJsonDocument doc = QJsonDocument::fromJson(raw, &err);
|
|
if (err.error == QJsonParseError::NoError && doc.isObject()) {
|
|
const QJsonObject root = doc.object();
|
|
qDebug() << "Успешный ответ: " << root.value("success").toBool();
|
|
}
|
|
} else {
|
|
qWarning() << "Ошибка:" << reply->errorString();
|
|
}
|
|
reply->deleteLater();
|
|
|
|
emit finished();
|
|
}
|
|
|
|
void NetworkService::stop() {
|
|
m_running = false;
|
|
}
|