From 1e3f1d13a6fb1bfc8f24be83032df1e92350dbcc Mon Sep 17 00:00:00 2001 From: Saturneric Date: Fri, 3 Dec 2021 05:35:16 +0800 Subject: Fixed. 1. Fixed known issue in File Operations. --- src/ui/function/VersionCheckThread.cpp | 77 ++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/ui/function/VersionCheckThread.cpp (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp new file mode 100644 index 00000000..50a4160e --- /dev/null +++ b/src/ui/function/VersionCheckThread.cpp @@ -0,0 +1,77 @@ +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see . + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric starting on May 12, 2021. + * + */ + +#include "VersionCheckThread.h" + +#include "GpgFrontendBuildInfo.h" +#include "rapidjson/document.h" + +using namespace rapidjson; + +namespace GpgFrontend::UI { + +void VersionCheckThread::run() { + LOG(INFO) << "Start Version Thread to get latest version from Github"; + + auto currentVersion = "v" + QString::number(VERSION_MAJOR) + "." + + QString::number(VERSION_MINOR) + "." + + QString::number(VERSION_PATCH); + + while (mNetworkReply->isRunning()) { + QApplication::processEvents(); + } + + if (mNetworkReply->error() != QNetworkReply::NoError) { + LOG(ERROR) << "VersionCheckThread Found Network Error"; + return; + } + + QByteArray bytes = mNetworkReply->readAll(); + + Document d; + d.Parse(bytes.constData()); + + QString latestVersion = d["tag_name"].GetString(); + + LOG(INFO) << "Latest Version From Github" << latestVersion.toStdString(); + + QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); + QRegularExpressionMatch match = re.match(latestVersion); + if (match.hasMatch()) { + latestVersion = match.captured(0); // matched == "23 def" + LOG(INFO) << "Latest Version Matched" << latestVersion.toStdString(); + } else { + latestVersion = currentVersion; + LOG(WARNING) << "Latest Version Unknown" << latestVersion.toStdString(); + } + + if (latestVersion != currentVersion) { + emit upgradeVersion(currentVersion, latestVersion); + } +} + +VersionCheckThread::VersionCheckThread(QNetworkReply* networkReply) + : mNetworkReply(networkReply) {} + +} // namespace GpgFrontend::UI -- cgit v1.2.3 From 70e341143a8fcc9bbe3af20231ba15cf53eebaac Mon Sep 17 00:00:00 2001 From: Saturneric Date: Sun, 5 Dec 2021 16:13:11 +0800 Subject: Remove rapidjson and Improve update ploicy. --- src/ui/function/VersionCheckThread.cpp | 49 ++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 23 deletions(-) (limited to 'src/ui/function/VersionCheckThread.cpp') diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index 50a4160e..765ccd2f 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -24,51 +24,54 @@ #include "VersionCheckThread.h" -#include "GpgFrontendBuildInfo.h" -#include "rapidjson/document.h" +#include +#include -using namespace rapidjson; +#include "GpgFrontendBuildInfo.h" +#include "json/json.hpp" namespace GpgFrontend::UI { void VersionCheckThread::run() { - LOG(INFO) << "Start Version Thread to get latest version from Github"; + using namespace nlohmann; - auto currentVersion = "v" + QString::number(VERSION_MAJOR) + "." + - QString::number(VERSION_MINOR) + "." + - QString::number(VERSION_PATCH); + 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(); } if (mNetworkReply->error() != QNetworkReply::NoError) { - LOG(ERROR) << "VersionCheckThread Found Network Error"; + LOG(ERROR) << "network error"; return; } - QByteArray bytes = mNetworkReply->readAll(); + auto bytes = mNetworkReply->readAll(); - Document d; - d.Parse(bytes.constData()); + auto reply_json = nlohmann::json::parse(bytes.toStdString()); - QString latestVersion = d["tag_name"].GetString(); + std::string latest_version = reply_json["tag_name"]; - LOG(INFO) << "Latest Version From Github" << latestVersion.toStdString(); + LOG(INFO) << "latest version from Github" << latest_version; - QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); - QRegularExpressionMatch match = re.match(latestVersion); - if (match.hasMatch()) { - latestVersion = match.captured(0); // matched == "23 def" - LOG(INFO) << "Latest Version Matched" << latestVersion.toStdString(); + std::regex re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); + auto version_begin = + std::sregex_iterator(latest_version.begin(), latest_version.end(), re); + auto version_end = std::sregex_iterator(); + if (std::distance(version_begin, version_end)) { + std::smatch match = *version_begin; + latest_version = match.str(); + LOG(INFO) << "latest version matched" << latest_version; } else { - latestVersion = currentVersion; - LOG(WARNING) << "Latest Version Unknown" << latestVersion.toStdString(); + latest_version = current_version; + LOG(WARNING) << "latest version unknown"; } - if (latestVersion != currentVersion) { - emit upgradeVersion(currentVersion, latestVersion); - } + emit upgradeVersion(current_version.c_str(), latest_version.c_str()); } VersionCheckThread::VersionCheckThread(QNetworkReply* networkReply) -- cgit v1.2.3