diff options
Diffstat (limited to 'src/module/integrated/version_checking_module/VersionCheckTask.cpp')
-rw-r--r-- | src/module/integrated/version_checking_module/VersionCheckTask.cpp | 143 |
1 files changed, 59 insertions, 84 deletions
diff --git a/src/module/integrated/version_checking_module/VersionCheckTask.cpp b/src/module/integrated/version_checking_module/VersionCheckTask.cpp index edc22cc1..1aa5d534 100644 --- a/src/module/integrated/version_checking_module/VersionCheckTask.cpp +++ b/src/module/integrated/version_checking_module/VersionCheckTask.cpp @@ -30,7 +30,6 @@ #include <QMetaType> #include <QtNetwork> -#include <nlohmann/json.hpp> #include "GpgFrontendBuildInfo.h" @@ -47,70 +46,50 @@ VersionCheckTask::VersionCheckTask() } void VersionCheckTask::Run() { - try { - using namespace nlohmann; - MODULE_LOG_DEBUG("current version: {}", current_version_); - QString latest_version_url = - "https://api.github.com/repos/saturneric/gpgfrontend/releases/latest"; - - QNetworkRequest latest_request; - latest_request.setUrl(QUrl(latest_version_url)); - latest_reply_ = network_manager_->get(latest_request); - connect(latest_reply_, &QNetworkReply::finished, this, - &VersionCheckTask::slot_parse_latest_version_info); - - // loading done - version_.loading_done = true; - - } catch (...) { - MODULE_LOG_ERROR("unknown error occurred"); - emit SignalTaskShouldEnd(-1); - } + MODULE_LOG_DEBUG("current version: {}", current_version_); + QString latest_version_url = + "https://api.github.com/repos/saturneric/gpgfrontend/releases/latest"; + + QNetworkRequest latest_request; + latest_request.setUrl(QUrl(latest_version_url)); + latest_reply_ = network_manager_->get(latest_request); + connect(latest_reply_, &QNetworkReply::finished, this, + &VersionCheckTask::slot_parse_latest_version_info); } void VersionCheckTask::slot_parse_latest_version_info() { version_.current_version = current_version_; - try { - if (latest_reply_ == nullptr || - latest_reply_->error() != QNetworkReply::NoError) { - MODULE_LOG_ERROR("latest version request error"); - version_.latest_version = current_version_; + if (latest_reply_ == nullptr || + latest_reply_->error() != QNetworkReply::NoError) { + MODULE_LOG_ERROR("latest version request error"); + version_.latest_version = current_version_; + } else { + latest_reply_bytes_ = latest_reply_->readAll(); + auto latest_reply_json = QJsonDocument::fromJson(latest_reply_bytes_); + + QString latest_version = latest_reply_json["tag_name"].toString(); + MODULE_LOG_INFO("latest version from Github: {}", latest_version); + + QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); + auto version_match = re.match(latest_version); + if (version_match.hasMatch()) { + latest_version = version_match.captured(0); + MODULE_LOG_DEBUG("latest version matched: {}", latest_version); } else { - latest_reply_bytes_ = latest_reply_->readAll(); - - auto latest_reply_json = - nlohmann::json::parse(latest_reply_bytes_.toStdString()); - - QString latest_version = - QString::fromStdString(latest_reply_json["tag_name"]); - - MODULE_LOG_INFO("latest version from Github: {}", latest_version); - - QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))"); - auto version_match = re.match(latest_version); - if (version_match.hasMatch()) { - latest_version = version_match.captured(0); - MODULE_LOG_DEBUG("latest version matched: {}", latest_version); - } else { - latest_version = current_version_; - MODULE_LOG_WARN("latest version unknown"); - } - - bool prerelease = latest_reply_json["prerelease"]; - bool draft = latest_reply_json["draft"]; - auto publish_date = - QString::fromStdString(latest_reply_json["published_at"]); - auto release_note = QString::fromStdString(latest_reply_json["body"]); - version_.latest_version = latest_version; - version_.latest_prerelease_version_from_remote = prerelease; - version_.latest_draft_from_remote = draft; - version_.publish_date = publish_date; - version_.release_note = release_note; + latest_version = current_version_; + MODULE_LOG_WARN("latest version unknown"); } - } catch (...) { - MODULE_LOG_ERROR("unknown error occurred"); - version_.loading_done = false; + + bool prerelease = latest_reply_json["prerelease"].toBool(); + bool draft = latest_reply_json["draft"].toBool(); + auto publish_date = latest_reply_json["published_at"].toString(); + auto release_note = latest_reply_json["body"].toString(); + version_.latest_version = latest_version; + version_.latest_prerelease_version_from_remote = prerelease; + version_.latest_draft_from_remote = draft; + version_.publish_date = publish_date; + version_.release_note = release_note; } if (latest_reply_ != nullptr) { @@ -135,42 +114,38 @@ void VersionCheckTask::slot_parse_latest_version_info() { } void VersionCheckTask::slot_parse_current_version_info() { - try { - if (current_reply_ == nullptr || - current_reply_->error() != QNetworkReply::NoError) { - if (current_reply_ != nullptr) { - MODULE_LOG_ERROR("current version request network error: {}", - current_reply_->errorString().toStdString()); - } else { - MODULE_LOG_ERROR( - "current version request network error, null reply object"); - } - version_.current_version_publish_in_remote = false; - version_.loading_done = false; + if (current_reply_ == nullptr || + current_reply_->error() != QNetworkReply::NoError) { + if (current_reply_ != nullptr) { + MODULE_LOG_ERROR("current version request network error: {}", + current_reply_->errorString().toStdString()); } else { - version_.current_version_publish_in_remote = true; - current_reply_bytes_ = current_reply_->readAll(); - MODULE_LOG_DEBUG("current version: {}", current_reply_bytes_.size()); - auto current_reply_json = - nlohmann::json::parse(current_reply_bytes_.toStdString()); - bool current_prerelease = current_reply_json["prerelease"]; - bool current_draft = current_reply_json["draft"]; + MODULE_LOG_ERROR( + "current version request network error, null reply object"); + } + version_.current_version_publish_in_remote = false; + } else { + version_.current_version_publish_in_remote = true; + current_reply_bytes_ = current_reply_->readAll(); + auto current_reply_json = QJsonDocument::fromJson(current_reply_bytes_); + + if (current_reply_json.isObject()) { + bool current_prerelease = current_reply_json["prerelease"].toBool(); + bool current_draft = current_reply_json["draft"].toBool(); version_.latest_prerelease_version_from_remote = current_prerelease; version_.latest_draft_from_remote = current_draft; + + // loading done version_.loading_done = true; + } else { + MODULE_LOG_WARN("cannot parse data got from github"); } - } catch (...) { - MODULE_LOG_ERROR("unknown error occurred"); - version_.loading_done = false; } MODULE_LOG_DEBUG("current version parse done: {}", version_.current_version_publish_in_remote); - if (current_reply_ != nullptr) { - current_reply_->deleteLater(); - } - + if (current_reply_ != nullptr) current_reply_->deleteLater(); emit SignalUpgradeVersion(version_); emit SignalTaskShouldEnd(0); } |