diff --git a/src/plugins/data-transfer/core/gui/transfer/resultdisplay.cpp b/src/plugins/data-transfer/core/gui/transfer/resultdisplay.cpp index 8db67a77f..dcd562069 100644 --- a/src/plugins/data-transfer/core/gui/transfer/resultdisplay.cpp +++ b/src/plugins/data-transfer/core/gui/transfer/resultdisplay.cpp @@ -8,6 +8,9 @@ #include #include #include +#include +#include +#include #include ResultDisplayWidget::ResultDisplayWidget(QWidget *parent) @@ -67,7 +70,8 @@ void ResultDisplayWidget::initUI() &ResultDisplayWidget::addResult); #ifdef linux connect(TransferHelper::instance(), &TransferHelper::transferFinished, this, [this] { - TransferHelper::instance()->sendMessage("add_result", processText); + QJsonDocument doc(resultArray); + TransferHelper::instance()->sendMessage("add_result", QString::fromUtf8(doc.toJson(QJsonDocument::Compact))); }); #endif } @@ -107,14 +111,17 @@ void ResultDisplayWidget::addResult(QString name, bool success, QString reason) setStatus(false); resultWindow->updateContent(name, reason, success); - QString res = success ? "true" : "false"; - processText.append(name + " " + res + " " + reason + ";"); + QJsonObject resultObj; + resultObj["name"] = name; + resultObj["success"] = success; + resultObj["reason"] = reason; + resultArray.append(resultObj); } void ResultDisplayWidget::clear() { resultWindow->clear(); - processText.clear(); + resultArray = QJsonArray(); setStatus(true); } diff --git a/src/plugins/data-transfer/core/gui/transfer/resultdisplay.h b/src/plugins/data-transfer/core/gui/transfer/resultdisplay.h index c21ed2ade..358bb751a 100644 --- a/src/plugins/data-transfer/core/gui/transfer/resultdisplay.h +++ b/src/plugins/data-transfer/core/gui/transfer/resultdisplay.h @@ -2,6 +2,7 @@ #define RESULTDISPLAYWIDGET_H #include +#include #include "../type_defines.h" class QTextBrowser; class QLabel; @@ -37,7 +38,7 @@ public slots: private: ResultWindow *resultWindow { nullptr }; - QString processText; + QJsonArray resultArray; QLabel *iconLabel { nullptr }; QLabel *titileLabel { nullptr }; QLabel *tiptextlabel { nullptr }; diff --git a/src/plugins/data-transfer/core/gui/transfer/transferringwidget.cpp b/src/plugins/data-transfer/core/gui/transfer/transferringwidget.cpp index a84483a86..4c0bf00ae 100644 --- a/src/plugins/data-transfer/core/gui/transfer/transferringwidget.cpp +++ b/src/plugins/data-transfer/core/gui/transfer/transferringwidget.cpp @@ -17,6 +17,9 @@ #include #include +#include +#include + TransferringWidget::TransferringWidget(QWidget *parent) : QFrame(parent) { @@ -202,9 +205,13 @@ void TransferringWidget::updateProcess(const QString &tpye, const QString &conte timeLabel->setText(QString(tr("Transfer will be completed in --"))); #ifdef linux //通知对方进程情况 - QString mes = tpye + " " + content + " " + QString::number(progressbar) + " " - + QString::number(estimatedtime) + ";"; - TransferHelper::instance()->sendMessage("transfer_content", mes); + QJsonObject contentObj; + contentObj["type"] = tpye; + contentObj["content"] = content; + contentObj["progressbar"] = progressbar; + contentObj["estimatedtime"] = estimatedtime; + QJsonDocument doc(contentObj); + TransferHelper::instance()->sendMessage("transfer_content", QString::fromUtf8(doc.toJson(QJsonDocument::Compact))); #endif } } diff --git a/src/plugins/data-transfer/core/utils/transferworker.cpp b/src/plugins/data-transfer/core/utils/transferworker.cpp index acfce1a6d..30d457fac 100644 --- a/src/plugins/data-transfer/core/utils/transferworker.cpp +++ b/src/plugins/data-transfer/core/utils/transferworker.cpp @@ -17,6 +17,10 @@ #include #include #include +#include +#include +#include +#include #pragma execution_character_set("utf-8") TransferHandle::TransferHandle() @@ -350,11 +354,15 @@ void TransferHandle::handleMiscMessage(QString jsonmsg) if (miscJson.has_member("add_result")) { QString result = miscJson.get("add_result").as_c_str(); LOG << "add_result" << result.data(); - for (QString str : result.split(";")) { - auto res = str.split(" "); - if (res.size() != 3) - continue; - emit TransferHelper::instance()->addResult(res.at(0), res.at(1) == "true", res.at(2)); + QJsonParseError parseError; + QJsonDocument doc = QJsonDocument::fromJson(result.toUtf8(), &parseError); + if (parseError.error == QJsonParseError::NoError && doc.isArray()) { + for (const QJsonValue &val : doc.array()) { + QJsonObject obj = val.toObject(); + emit TransferHelper::instance()->addResult(obj.value("name").toString(), + obj.value("success").toBool(), + obj.value("reason").toString()); + } } emit TransferHelper::instance()->transferFinished(); } @@ -376,11 +384,14 @@ void TransferHandle::handleMiscMessage(QString jsonmsg) if (miscJson.has_member("transfer_content")) { QString result = miscJson.get("transfer_content").as_c_str(); - for (QString str : result.split(";")) { - auto res = str.split(" "); - if (res.size() != 4) - continue; - emit TransferHelper::instance()->transferContent(res.at(0), res.at(1), res.at(2).toInt(), res.at(3).toInt()); + QJsonParseError parseError; + QJsonDocument doc = QJsonDocument::fromJson(result.toUtf8(), &parseError); + if (parseError.error == QJsonParseError::NoError && doc.isObject()) { + QJsonObject obj = doc.object(); + emit TransferHelper::instance()->transferContent(obj.value("type").toString(), + obj.value("content").toString(), + obj.value("progressbar").toInt(), + obj.value("estimatedtime").toInt()); } } }