From 2f64e4300b77f74cc4a7f0f50dbfe87862b72b95 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Tue, 4 Jan 2022 06:10:04 +0800 Subject: (core, ui): version system upgrade. 1. can notice user withdraw version now. 2. fix software not restart when signal caught. 3. improve ui. --- src/ui/function/VersionCheckThread.cpp | 107 ++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 28 deletions(-) (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index bad60ef4..e038ab97 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -24,8 +24,7 @@ #include "VersionCheckThread.h" -#include -#include +#include #include "GpgFrontendBuildInfo.h" #include "json/json.hpp" @@ -33,45 +32,97 @@ namespace GpgFrontend::UI { void VersionCheckThread::run() { - using namespace nlohmann; - - LOG(INFO) << "get latest version from Github"; - auto current_version = std::string("v") + std::to_string(VERSION_MAJOR) + "." + std::to_string(VERSION_MINOR) + "." + std::to_string(VERSION_PATCH); - while (mNetworkReply->isRunning()) { - QApplication::processEvents(); - } + auto manager = new QNetworkAccessManager(nullptr); - if (mNetworkReply->error() != QNetworkReply::NoError) { - LOG(ERROR) << "network error"; - return; - } + LOG(INFO) << "current version" << current_version; - auto bytes = mNetworkReply->readAll(); + std::string latest_version_url = + "https://api.github.com/repos/saturneric/gpgfrontend/releases/latest"; - auto reply_json = nlohmann::json::parse(bytes.toStdString()); + std::string current_version_url = + "https://api.github.com/repos/saturneric/gpgfrontend/releases/tags/" + + current_version; - std::string latest_version = reply_json["tag_name"]; + QNetworkRequest latest_request, current_request; + latest_request.setUrl(QUrl(latest_version_url.c_str())); + current_request.setUrl(QUrl(current_version_url.c_str())); + auto reply = manager->get(latest_request); + while (reply->isRunning()) QApplication::processEvents(); + if (reply->error() != QNetworkReply::NoError) { + LOG(ERROR) << "network error"; + manager->deleteLater(); + return; + } - LOG(INFO) << "latest version from Github" << latest_version; + latest_reply_bytes_ = reply->readAll(); + reply = manager->get(current_request); + while (reply->isRunning()) QApplication::processEvents(); + current_reply_bytes_ = reply->readAll(); + if (reply->error() != QNetworkReply::NoError) { + LOG(ERROR) << "network error"; + manager->deleteLater(); + return; + } - QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); - auto version_match = re.match(latest_version.c_str()); - if (version_match.hasMatch()) { - latest_version = version_match.captured(0).toStdString(); - LOG(INFO) << "latest version matched" << latest_version; - } else { - latest_version = current_version; - LOG(WARNING) << "latest version unknown"; + SoftwareVersion version; + version.current_version = current_version; + + try { + using namespace nlohmann; + + auto latest_reply_json = + nlohmann::json::parse(latest_reply_bytes_.toStdString()); + auto current_reply_json = + nlohmann::json::parse(current_reply_bytes_.toStdString()); + + std::string latest_version = latest_reply_json["tag_name"]; + + LOG(INFO) << "latest version from Github" << latest_version; + + QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); + auto version_match = re.match(latest_version.c_str()); + if (version_match.hasMatch()) { + latest_version = version_match.captured(0).toStdString(); + LOG(INFO) << "latest version matched" << latest_version; + } else { + latest_version = current_version; + LOG(WARNING) << "latest version unknown"; + } + + bool prerelease = latest_reply_json["prerelease"], + draft = latest_reply_json["draft"]; + std::string publish_date = latest_reply_json["published_at"]; + std::string release_note = latest_reply_json["body"]; + version.latest_version = latest_version; + version.latest_prerelease = prerelease; + version.latest_draft = draft; + version.publish_date = publish_date; + version.release_note = release_note; + + bool current_prerelease = current_reply_json["prerelease"], + current_draft = current_reply_json["draft"]; + version.latest_prerelease = current_prerelease; + version.latest_draft = current_draft; + + // loading done + version.load_info_done = true; + + } catch (...) { + LOG(INFO) << "error occurred"; + version.load_info_done = false; } - emit upgradeVersion(current_version.c_str(), latest_version.c_str()); + manager->deleteLater(); + + emit upgradeVersion(version); } -VersionCheckThread::VersionCheckThread(QNetworkReply* networkReply) - : mNetworkReply(networkReply) {} +VersionCheckThread::VersionCheckThread() : QThread(nullptr) { + qRegisterMetaType("SoftwareVersion"); +}; } // namespace GpgFrontend::UI -- cgit v1.2.3 From 14c5e000141360e19a067f0385dc43569fb73cc6 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Tue, 4 Jan 2022 16:20:35 +0800 Subject: (core): fix windows build problem 1.fix libintl_snprintf bugs. 2. improve VersionCheckThread. --- src/ui/function/VersionCheckThread.cpp | 119 ++++++++++++++++----------------- 1 file changed, 58 insertions(+), 61 deletions(-) (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index e038ab97..091f7cd2 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -36,77 +36,76 @@ void VersionCheckThread::run() { "." + std::to_string(VERSION_MINOR) + "." + std::to_string(VERSION_PATCH); - auto manager = new QNetworkAccessManager(nullptr); - - LOG(INFO) << "current version" << current_version; - - std::string latest_version_url = - "https://api.github.com/repos/saturneric/gpgfrontend/releases/latest"; - - std::string current_version_url = - "https://api.github.com/repos/saturneric/gpgfrontend/releases/tags/" + - current_version; - - QNetworkRequest latest_request, current_request; - latest_request.setUrl(QUrl(latest_version_url.c_str())); - current_request.setUrl(QUrl(current_version_url.c_str())); - auto reply = manager->get(latest_request); - while (reply->isRunning()) QApplication::processEvents(); - if (reply->error() != QNetworkReply::NoError) { - LOG(ERROR) << "network error"; - manager->deleteLater(); - return; - } - - latest_reply_bytes_ = reply->readAll(); - reply = manager->get(current_request); - while (reply->isRunning()) QApplication::processEvents(); - current_reply_bytes_ = reply->readAll(); - if (reply->error() != QNetworkReply::NoError) { - LOG(ERROR) << "network error"; - manager->deleteLater(); - return; - } - SoftwareVersion version; version.current_version = current_version; + auto manager = new QNetworkAccessManager(nullptr); + try { using namespace nlohmann; - auto latest_reply_json = - nlohmann::json::parse(latest_reply_bytes_.toStdString()); - auto current_reply_json = - nlohmann::json::parse(current_reply_bytes_.toStdString()); + LOG(INFO) << "current version" << current_version; - std::string latest_version = latest_reply_json["tag_name"]; + std::string latest_version_url = + "https://api.github.com/repos/saturneric/gpgfrontend/releases/latest"; - LOG(INFO) << "latest version from Github" << latest_version; + std::string current_version_url = + "https://api.github.com/repos/saturneric/gpgfrontend/releases/tags/" + + current_version; - QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); - auto version_match = re.match(latest_version.c_str()); - if (version_match.hasMatch()) { - latest_version = version_match.captured(0).toStdString(); - LOG(INFO) << "latest version matched" << latest_version; + QNetworkRequest latest_request, current_request; + latest_request.setUrl(QUrl(latest_version_url.c_str())); + current_request.setUrl(QUrl(current_version_url.c_str())); + auto reply = manager->get(latest_request); + while (reply->isRunning()) QApplication::processEvents(); + if (reply->error() != QNetworkReply::NoError) { + LOG(ERROR) << "network error"; + version.latest_version = current_version; } else { - latest_version = current_version; - LOG(WARNING) << "latest version unknown"; + auto latest_reply_json = + nlohmann::json::parse(latest_reply_bytes_.toStdString()); + + std::string latest_version = latest_reply_json["tag_name"]; + + LOG(INFO) << "latest version from Github" << latest_version; + + QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); + auto version_match = re.match(latest_version.c_str()); + if (version_match.hasMatch()) { + latest_version = version_match.captured(0).toStdString(); + LOG(INFO) << "latest version matched" << latest_version; + } else { + latest_version = current_version; + LOG(WARNING) << "latest version unknown"; + } + + bool prerelease = latest_reply_json["prerelease"], + draft = latest_reply_json["draft"]; + std::string publish_date = latest_reply_json["published_at"]; + std::string release_note = latest_reply_json["body"]; + version.latest_version = latest_version; + version.latest_prerelease = prerelease; + version.latest_draft = draft; + version.publish_date = publish_date; + version.release_note = release_note; } - bool prerelease = latest_reply_json["prerelease"], - draft = latest_reply_json["draft"]; - std::string publish_date = latest_reply_json["published_at"]; - std::string release_note = latest_reply_json["body"]; - version.latest_version = latest_version; - version.latest_prerelease = prerelease; - version.latest_draft = draft; - version.publish_date = publish_date; - version.release_note = release_note; - - bool current_prerelease = current_reply_json["prerelease"], - current_draft = current_reply_json["draft"]; - version.latest_prerelease = current_prerelease; - version.latest_draft = current_draft; + latest_reply_bytes_ = reply->readAll(); + reply = manager->get(current_request); + while (reply->isRunning()) QApplication::processEvents(); + current_reply_bytes_ = reply->readAll(); + if (reply->error() != QNetworkReply::NoError) { + LOG(ERROR) << "network error"; + manager->deleteLater(); + return; + } else { + auto current_reply_json = + nlohmann::json::parse(current_reply_bytes_.toStdString()); + bool current_prerelease = current_reply_json["prerelease"], + current_draft = current_reply_json["draft"]; + version.latest_prerelease = current_prerelease; + version.latest_draft = current_draft; + } // loading done version.load_info_done = true; @@ -115,9 +114,7 @@ void VersionCheckThread::run() { LOG(INFO) << "error occurred"; version.load_info_done = false; } - manager->deleteLater(); - emit upgradeVersion(version); } -- cgit v1.2.3 From 4b1c63107929e9c5415e75b696876f65eeac9ac3 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Tue, 4 Jan 2022 17:03:18 +0800 Subject: (ui): improve ui. --- src/ui/function/VersionCheckThread.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index 091f7cd2..52d1b22a 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -56,12 +56,13 @@ void VersionCheckThread::run() { QNetworkRequest latest_request, current_request; latest_request.setUrl(QUrl(latest_version_url.c_str())); current_request.setUrl(QUrl(current_version_url.c_str())); - auto reply = manager->get(latest_request); - while (reply->isRunning()) QApplication::processEvents(); - if (reply->error() != QNetworkReply::NoError) { + auto _reply = manager->get(latest_request); + while (_reply->isRunning()) QApplication::processEvents(); + if (_reply->error() != QNetworkReply::NoError) { LOG(ERROR) << "network error"; version.latest_version = current_version; } else { + latest_reply_bytes_ = _reply->readAll(); auto latest_reply_json = nlohmann::json::parse(latest_reply_bytes_.toStdString()); @@ -90,11 +91,10 @@ void VersionCheckThread::run() { version.release_note = release_note; } - latest_reply_bytes_ = reply->readAll(); - reply = manager->get(current_request); - while (reply->isRunning()) QApplication::processEvents(); - current_reply_bytes_ = reply->readAll(); - if (reply->error() != QNetworkReply::NoError) { + _reply = manager->get(current_request); + while (_reply->isRunning()) QApplication::processEvents(); + current_reply_bytes_ = _reply->readAll(); + if (_reply->error() != QNetworkReply::NoError) { LOG(ERROR) << "network error"; manager->deleteLater(); return; -- cgit v1.2.3 From f297a701bbcfa5f0586cc02af29a4e9af281910c Mon Sep 17 00:00:00 2001 From: Saturneric Date: Tue, 4 Jan 2022 18:49:11 +0800 Subject: (core, ui): fixed known bugs for v2.0.4-beta.1. 1. longer expire date for keygen. 2. version system improved and fixed. 3. include ui text not translated. 4. improve ui. --- src/ui/function/VersionCheckThread.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index 52d1b22a..bfd6ea46 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -39,16 +39,14 @@ void VersionCheckThread::run() { SoftwareVersion version; version.current_version = current_version; - auto manager = new QNetworkAccessManager(nullptr); + auto manager = std::make_unique(nullptr); try { using namespace nlohmann; - LOG(INFO) << "current version" << current_version; std::string latest_version_url = "https://api.github.com/repos/saturneric/gpgfrontend/releases/latest"; - std::string current_version_url = "https://api.github.com/repos/saturneric/gpgfrontend/releases/tags/" + current_version; @@ -59,7 +57,7 @@ void VersionCheckThread::run() { auto _reply = manager->get(latest_request); while (_reply->isRunning()) QApplication::processEvents(); if (_reply->error() != QNetworkReply::NoError) { - LOG(ERROR) << "network error"; + LOG(ERROR) << "current version request error"; version.latest_version = current_version; } else { latest_reply_bytes_ = _reply->readAll(); @@ -95,10 +93,10 @@ void VersionCheckThread::run() { while (_reply->isRunning()) QApplication::processEvents(); current_reply_bytes_ = _reply->readAll(); if (_reply->error() != QNetworkReply::NoError) { - LOG(ERROR) << "network error"; - manager->deleteLater(); - return; + LOG(ERROR) << "current version request network error"; + version.current_version_found = false; } else { + version.current_version_found = true; auto current_reply_json = nlohmann::json::parse(current_reply_bytes_.toStdString()); bool current_prerelease = current_reply_json["prerelease"], @@ -114,7 +112,6 @@ void VersionCheckThread::run() { LOG(INFO) << "error occurred"; version.load_info_done = false; } - manager->deleteLater(); emit upgradeVersion(version); } -- cgit v1.2.3 From 22308b720a2c03b69d07cf3133c34b40d04c5904 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Tue, 4 Jan 2022 20:34:05 +0800 Subject: (core, ui): fixed known bugs for v2.0.4-beta.1 and add network settings. 1. proxy settings. 2. network capability. 3. fixed known bugs. 4. improve ui. --- src/ui/function/VersionCheckThread.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index bfd6ea46..2a1cf9af 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -89,6 +89,8 @@ void VersionCheckThread::run() { version.release_note = release_note; } + _reply->deleteLater(); + _reply = manager->get(current_request); while (_reply->isRunning()) QApplication::processEvents(); current_reply_bytes_ = _reply->readAll(); @@ -104,6 +106,7 @@ void VersionCheckThread::run() { version.latest_prerelease = current_prerelease; version.latest_draft = current_draft; } + _reply->deleteLater(); // loading done version.load_info_done = true; -- cgit v1.2.3