mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-02-18 04:45:39 +00:00
Simplified ApplicationUpdater by only using the release number when checking for updates
Also added more error checking by checking for blank name, filename, url and md5 keys in latest_release.json
This commit is contained in:
parent
baf8deb8ff
commit
63b02c2ad0
|
@ -266,24 +266,40 @@ void ApplicationUpdater::parseFile()
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"Invalid file structure, package \"name\" key missing");
|
"Invalid file structure, package \"name\" key missing");
|
||||||
|
|
||||||
|
if (package.name == "")
|
||||||
|
throw std::runtime_error(
|
||||||
|
"Invalid file contents, package \"name\" key is blank");
|
||||||
|
|
||||||
if (packageEntry.HasMember("filename") && packageEntry["filename"].IsString())
|
if (packageEntry.HasMember("filename") && packageEntry["filename"].IsString())
|
||||||
package.filename = packageEntry["filename"].GetString();
|
package.filename = packageEntry["filename"].GetString();
|
||||||
else
|
else
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"Invalid file structure, package \"filename\" key missing");
|
"Invalid file structure, package \"filename\" key missing");
|
||||||
|
|
||||||
|
if (package.filename == "")
|
||||||
|
throw std::runtime_error(
|
||||||
|
"Invalid file contents, package \"filename\" key is blank");
|
||||||
|
|
||||||
if (packageEntry.HasMember("url") && packageEntry["url"].IsString())
|
if (packageEntry.HasMember("url") && packageEntry["url"].IsString())
|
||||||
package.url = packageEntry["url"].GetString();
|
package.url = packageEntry["url"].GetString();
|
||||||
else
|
else
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"Invalid file structure, package \"url\" key missing");
|
"Invalid file structure, package \"url\" key missing");
|
||||||
|
|
||||||
|
if (package.url == "")
|
||||||
|
throw std::runtime_error(
|
||||||
|
"Invalid file contents, package \"url\" key is blank");
|
||||||
|
|
||||||
if (packageEntry.HasMember("md5") && packageEntry["md5"].IsString())
|
if (packageEntry.HasMember("md5") && packageEntry["md5"].IsString())
|
||||||
package.md5 = packageEntry["md5"].GetString();
|
package.md5 = packageEntry["md5"].GetString();
|
||||||
else
|
else
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"Invalid file structure, package \"md5\" key missing");
|
"Invalid file structure, package \"md5\" key missing");
|
||||||
|
|
||||||
|
if (package.md5 == "")
|
||||||
|
throw std::runtime_error(
|
||||||
|
"Invalid file contents, package \"md5\" key is blank");
|
||||||
|
|
||||||
if (packageEntry.HasMember("message") && packageEntry["message"].IsString())
|
if (packageEntry.HasMember("message") && packageEntry["message"].IsString())
|
||||||
package.message = packageEntry["message"].GetString();
|
package.message = packageEntry["message"].GetString();
|
||||||
else
|
else
|
||||||
|
@ -323,7 +339,7 @@ void ApplicationUpdater::compareVersions()
|
||||||
{
|
{
|
||||||
std::deque<Release*> releaseTypes {&mStableRelease};
|
std::deque<Release*> releaseTypes {&mStableRelease};
|
||||||
|
|
||||||
if (mPrerelease.version != "") {
|
if (mPrerelease.releaseNum != "") {
|
||||||
#if defined(IS_PRERELEASE)
|
#if defined(IS_PRERELEASE)
|
||||||
releaseTypes.emplace_front(&mPrerelease);
|
releaseTypes.emplace_front(&mPrerelease);
|
||||||
#else
|
#else
|
||||||
|
@ -335,44 +351,12 @@ void ApplicationUpdater::compareVersions()
|
||||||
mNewVersion = false;
|
mNewVersion = false;
|
||||||
|
|
||||||
for (auto& releaseType : releaseTypes) {
|
for (auto& releaseType : releaseTypes) {
|
||||||
// If the version does not follow the semantic versioning scheme then always consider it to
|
// That these keys are blank is not technically wrong as the prerelease is optional,
|
||||||
// be a new release as perhaps the version scheme will be changed sometime in the future.
|
// therefore we just check them here and not in the parseFile() function.
|
||||||
if (count_if(releaseType->version.cbegin(), releaseType->version.cend(),
|
if (releaseType->version == "" || releaseType->releaseNum == "" || releaseType->date == "")
|
||||||
[](char c) { return c == '.'; }) != 2) {
|
continue;
|
||||||
mNewVersion = true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
std::vector<std::string> fileVersion {
|
|
||||||
Utils::String::delimitedStringToVector(releaseType->version, ".")};
|
|
||||||
|
|
||||||
const size_t dashPos {fileVersion.back().find('-')};
|
mNewVersion = (std::stoi(releaseType->releaseNum) > PROGRAM_RELEASE_NUMBER);
|
||||||
if (dashPos != std::string::npos)
|
|
||||||
fileVersion.back() = fileVersion.back().substr(0, dashPos);
|
|
||||||
|
|
||||||
int versionWeight {0};
|
|
||||||
|
|
||||||
if (std::stoi(fileVersion.at(0)) > PROGRAM_VERSION_MAJOR)
|
|
||||||
versionWeight += 8;
|
|
||||||
else if (std::stoi(fileVersion.at(0)) < PROGRAM_VERSION_MAJOR)
|
|
||||||
versionWeight -= 8;
|
|
||||||
|
|
||||||
if (std::stoi(fileVersion.at(1)) > PROGRAM_VERSION_MINOR)
|
|
||||||
versionWeight += 4;
|
|
||||||
else if (std::stoi(fileVersion.at(1)) < PROGRAM_VERSION_MINOR)
|
|
||||||
versionWeight -= 4;
|
|
||||||
|
|
||||||
if (std::stoi(fileVersion.at(2)) > PROGRAM_VERSION_MAINTENANCE)
|
|
||||||
versionWeight += 2;
|
|
||||||
else if (std::stoi(fileVersion.at(2)) < PROGRAM_VERSION_MAINTENANCE)
|
|
||||||
versionWeight -= 2;
|
|
||||||
|
|
||||||
// If versions match precisely then fall back to using the release number.
|
|
||||||
if (versionWeight == 0 && std::stoi(releaseType->releaseNum) > PROGRAM_RELEASE_NUMBER)
|
|
||||||
++versionWeight;
|
|
||||||
|
|
||||||
if (versionWeight > 0)
|
|
||||||
mNewVersion = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mNewVersion) {
|
if (mNewVersion) {
|
||||||
for (auto& package : releaseType->packages) {
|
for (auto& package : releaseType->packages) {
|
||||||
|
@ -410,10 +394,18 @@ void ApplicationUpdater::compareVersions()
|
||||||
.append("), release date: ")
|
.append("), release date: ")
|
||||||
.append(releaseType->date);
|
.append(releaseType->date);
|
||||||
|
|
||||||
mResults.append("New ")
|
mResults.append("New ");
|
||||||
.append(releaseType == &mStableRelease ? "release " : "prerelease ")
|
|
||||||
.append("available: ")
|
if (releaseType == &mPrerelease) {
|
||||||
.append(releaseType->version);
|
mResults.append("prerelease available:\n")
|
||||||
|
.append(releaseType->version)
|
||||||
|
.append(" (")
|
||||||
|
.append(releaseType->date)
|
||||||
|
.append(")");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mResults.append("release available: ").append(releaseType->version);
|
||||||
|
}
|
||||||
|
|
||||||
if (mPackage.name != "LinuxAppImage" && mPackage.name != "LinuxSteamDeckAppImage")
|
if (mPackage.name != "LinuxAppImage" && mPackage.name != "LinuxSteamDeckAppImage")
|
||||||
mResults.append("\nIt can be downloaded from\n").append("https://es-de.org");
|
mResults.append("\nIt can be downloaded from\n").append("https://es-de.org");
|
||||||
|
|
|
@ -29,7 +29,6 @@ GuiApplicationUpdater::GuiApplicationUpdater()
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
|
||||||
mPackage = ApplicationUpdater::getInstance().getPackageInfo();
|
mPackage = ApplicationUpdater::getInstance().getPackageInfo();
|
||||||
assert(mPackage.url != "");
|
|
||||||
|
|
||||||
LOG(LogInfo) << "Starting Application Updater";
|
LOG(LogInfo) << "Starting Application Updater";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue