|
|
|
|
@ -31,6 +31,60 @@
@@ -31,6 +31,60 @@
|
|
|
|
|
|
|
|
|
|
namespace { |
|
|
|
|
const QString versionUrl{QStringLiteral("https://api.github.com/repos/qTox/qTox/releases/latest")}; |
|
|
|
|
|
|
|
|
|
struct Version { |
|
|
|
|
int major; |
|
|
|
|
int minor; |
|
|
|
|
int patch; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
Version tagToVersion(QString tagName) |
|
|
|
|
{ |
|
|
|
|
// capture tag name to avoid showing update available on dev builds which include hash as part of describe
|
|
|
|
|
QRegularExpression versionFormat{QStringLiteral("v([0-9]+)\\.([0-9]+)\\.([0-9]+)")}; |
|
|
|
|
auto matches = versionFormat.match(tagName); |
|
|
|
|
assert(matches.lastCapturedIndex() == 3); |
|
|
|
|
|
|
|
|
|
bool ok; |
|
|
|
|
auto major = matches.captured(1).toInt(&ok); |
|
|
|
|
assert(ok); |
|
|
|
|
auto minor = matches.captured(2).toInt(&ok); |
|
|
|
|
assert(ok); |
|
|
|
|
auto patch = matches.captured(3).toInt(&ok); |
|
|
|
|
assert(ok); |
|
|
|
|
|
|
|
|
|
return {major, minor, patch}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool isUpdateAvailable(Version current, Version available) |
|
|
|
|
{ |
|
|
|
|
// A user may have a version greater than our latest release in the time between a tag being pushed and the release
|
|
|
|
|
// being published. Don't notify about an update in that case.
|
|
|
|
|
|
|
|
|
|
if (current.major < available.major) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if (current.major > available.major) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (current.minor < available.minor) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if (current.minor > available.minor) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (current.patch < available.patch) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if (current.patch > available.patch) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
UpdateCheck::UpdateCheck(const Settings& settings) |
|
|
|
|
@ -78,10 +132,10 @@ void UpdateCheck::handleResponse(QNetworkReply* reply)
@@ -78,10 +132,10 @@ void UpdateCheck::handleResponse(QNetworkReply* reply)
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// capture tag name to avoid showing update available on dev builds which include hash as part of describe
|
|
|
|
|
QRegularExpression versionFormat{QStringLiteral("v[0-9]+.[0-9]+.[0-9]+")}; |
|
|
|
|
QString curVer = versionFormat.match(GIT_DESCRIBE).captured(0); |
|
|
|
|
if (latestVersion != curVer) { |
|
|
|
|
auto currentVer = tagToVersion(GIT_DESCRIBE); |
|
|
|
|
auto availableVer = tagToVersion(latestVersion); |
|
|
|
|
|
|
|
|
|
if (isUpdateAvailable(currentVer, availableVer)) { |
|
|
|
|
qInfo() << "Update available to version" << latestVersion; |
|
|
|
|
QUrl link{mainMap["html_url"].toString()}; |
|
|
|
|
emit updateAvailable(latestVersion, link); |
|
|
|
|
|