aboutsummaryrefslogtreecommitdiffstats
path: root/src/m_ver_check
diff options
context:
space:
mode:
Diffstat (limited to 'src/m_ver_check')
-rw-r--r--src/m_ver_check/GitHubVersionCheckTask.cpp73
-rw-r--r--src/m_ver_check/GitHubVersionCheckTask.h9
2 files changed, 63 insertions, 19 deletions
diff --git a/src/m_ver_check/GitHubVersionCheckTask.cpp b/src/m_ver_check/GitHubVersionCheckTask.cpp
index 3a1419a..3ea1f25 100644
--- a/src/m_ver_check/GitHubVersionCheckTask.cpp
+++ b/src/m_ver_check/GitHubVersionCheckTask.cpp
@@ -39,14 +39,14 @@
#include "GFModuleCommonUtils.hpp"
#include "SoftwareVersion.h"
#include "Utils.h"
-#include "VersionCheckingModule.h"
GitHubVersionCheckTask::GitHubVersionCheckTask()
: network_manager_(new QNetworkAccessManager(this)),
current_version_(GFProjectVersion()) {
qRegisterMetaType<SoftwareVersion>("SoftwareVersion");
- version_meta_data_.current_version = current_version_;
- version_meta_data_.local_commit_hash = GFProjectGitCommitHash();
+ meta_.api = "GitHub";
+ meta_.current_version = current_version_;
+ meta_.local_commit_hash = GFProjectGitCommitHash();
}
auto GitHubVersionCheckTask::Run() -> int {
@@ -55,16 +55,19 @@ auto GitHubVersionCheckTask::Run() -> int {
{base_url + "/releases/latest"},
{base_url + "/releases/tags/" + current_version_},
{base_url + "/git/ref/tags/" + current_version_},
+ {base_url + "/commits/" + meta_.local_commit_hash},
};
connect(network_manager_, &QNetworkAccessManager::finished, this,
&GitHubVersionCheckTask::slot_parse_reply);
+ int index = 0;
for (const QUrl& url : urls) {
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::UserAgentHeader,
GFHttpRequestUserAgent());
QNetworkReply* reply = network_manager_->get(request);
+ reply->setProperty("GFCheckIndex", index++);
replies_.append(reply);
}
@@ -73,8 +76,10 @@ auto GitHubVersionCheckTask::Run() -> int {
void GitHubVersionCheckTask::slot_parse_reply(QNetworkReply* reply) {
if (reply->error() == QNetworkReply::NoError) {
- FLOG_DEBUG("get reply from url: %1", reply->url().toString());
- switch (replies_.indexOf(reply)) {
+ auto index = reply->property("GFCheckIndex").toInt();
+ FLOG_DEBUG("get reply from url: %1, index: %2", reply->url().toString(),
+ index);
+ switch (index) {
case 0:
slot_parse_latest_version_info(reply);
break;
@@ -84,6 +89,9 @@ void GitHubVersionCheckTask::slot_parse_reply(QNetworkReply* reply) {
case 2:
slot_parse_current_tag_info(reply);
break;
+ case 3:
+ slot_parse_current_commit_info(reply);
+ break;
default:
break;
}
@@ -96,8 +104,8 @@ void GitHubVersionCheckTask::slot_parse_reply(QNetworkReply* reply) {
reply->deleteLater();
if (replies_.isEmpty()) {
- FillGrtWithVersionInfo(version_meta_data_);
- emit SignalUpgradeVersion(version_meta_data_);
+ FillGrtWithVersionInfo(meta_);
+ emit SignalUpgradeVersion(meta_);
}
}
@@ -131,9 +139,9 @@ void GitHubVersionCheckTask::slot_parse_latest_version_info(
auto publish_date = latest_reply_json["published_at"].toString();
auto release_note = latest_reply_json["body"].toString();
- version_meta_data_.latest_version = latest_version;
- version_meta_data_.publish_date = publish_date;
- version_meta_data_.release_note = release_note;
+ meta_.latest_version = latest_version;
+ meta_.publish_date = publish_date;
+ meta_.release_note = release_note;
}
void GitHubVersionCheckTask::slot_parse_current_version_info(
@@ -148,16 +156,16 @@ void GitHubVersionCheckTask::slot_parse_current_version_info(
return;
}
- version_meta_data_.current_version_publish_in_remote = true;
+ meta_.current_version_publish_in_remote = true;
}
void GitHubVersionCheckTask::slot_parse_current_tag_info(QNetworkReply* reply) {
if (reply == nullptr || reply->error() != QNetworkReply::NoError) {
- version_meta_data_.current_version_publish_in_remote = false;
+ meta_.current_version_publish_in_remote = false;
return;
}
- version_meta_data_.current_version_publish_in_remote = true;
+ meta_.current_version_publish_in_remote = true;
auto reply_bytes = reply->readAll();
auto current_reply_json = QJsonDocument::fromJson(reply_bytes);
@@ -168,13 +176,42 @@ void GitHubVersionCheckTask::slot_parse_current_tag_info(QNetworkReply* reply) {
auto object = current_reply_json["object"].toObject();
if (object["type"].toString() != "commit") {
- FLOG_WARN("remote tag: %1 is not a ref: %2",
- version_meta_data_.current_version, object["type"].toString());
+ FLOG_WARN("remote tag: %1 is not a ref: %2", meta_.current_version,
+ object["type"].toString());
return;
}
auto sha = object["sha"].toString();
- version_meta_data_.remote_commit_hash_by_tag = sha.trimmed();
- FLOG_DEBUG("got remote commit hash: %1",
- version_meta_data_.remote_commit_hash_by_tag);
+ meta_.remote_commit_hash_by_tag = sha.trimmed();
+ FLOG_DEBUG("got remote commit hash: %1", meta_.remote_commit_hash_by_tag);
+}
+
+void GitHubVersionCheckTask::slot_parse_current_commit_info(
+ QNetworkReply* reply) {
+ if (reply == nullptr || reply->error() != QNetworkReply::NoError) {
+ meta_.current_version_publish_in_remote = false;
+ return;
+ }
+
+ meta_.current_version_publish_in_remote = true;
+ auto reply_bytes = reply->readAll();
+ auto current_reply_json = QJsonDocument::fromJson(reply_bytes);
+
+ if (!current_reply_json.isObject()) {
+ FLOG_WARN("cannot parse data from github: %1", reply_bytes);
+ return;
+ }
+
+ auto object = current_reply_json["object"].toObject();
+ if (object["type"].toString() != "commit") {
+ FLOG_WARN("remote tag: %1 is not a ref: %2", meta_.current_version,
+ object["type"].toString());
+ return;
+ }
+
+ auto sha = object["sha"].toString();
+ FLOG_DEBUG("got remote commit hash from github: %1",
+ meta_.remote_commit_hash_by_tag);
+
+ meta_.current_commit_hash_publish_in_remote = sha == meta_.local_commit_hash;
}
diff --git a/src/m_ver_check/GitHubVersionCheckTask.h b/src/m_ver_check/GitHubVersionCheckTask.h
index c77f8fa..ebe8192 100644
--- a/src/m_ver_check/GitHubVersionCheckTask.h
+++ b/src/m_ver_check/GitHubVersionCheckTask.h
@@ -93,9 +93,16 @@ class GitHubVersionCheckTask : public QObject {
*/
void slot_parse_current_tag_info(QNetworkReply* reply);
+ /**
+ * @brief
+ *
+ * @param reply
+ */
+ void slot_parse_current_commit_info(QNetworkReply* reply);
+
private:
QList<QNetworkReply*> replies_; ///<
QNetworkAccessManager* network_manager_; ///<
QString current_version_; ///<
- SoftwareVersion version_meta_data_;
+ SoftwareVersion meta_;
};