diff options
| author | crueter <crueter@eden-emu.dev> | 2026-04-24 18:40:49 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-04-24 18:40:49 +0200 |
| commit | 26ce96297cd3ca014bc526cd4ef03c731ef7bbd9 (patch) | |
| tree | 31876e12417bb5633c1ad3171e6fbaa8735d7406 /src/frontend_common | |
| parent | b3cc8723c14a48bd75f124bed67ac5a2b44e013a (diff) | |
[frontend] Change update checker to use new endpoints (#3879)
Related: [RFC3870](https://git.eden-emu.dev/eden-emu/eden/issues/3870)
Nightly and stable releases are now served through
`nightly.eden-emu.dev` and `stable.eden-emu.dev`, respectively. These
are stored using Backblaze, and served and cached through the Cloudflare
CDN. Ideally this will reduce costs, though I'll have to wait for my
first invoice to be certain.
These will serve as the new download locations going forward. Since we
have full control over this API, we can make any adjustments we want as
needed. For now, all it does is provide `tag_name`, `name`, and `body`,
the latter of which will be used for the upcoming updater PR.
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3879
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Diffstat (limited to 'src/frontend_common')
| -rw-r--r-- | src/frontend_common/update_checker.cpp | 53 | ||||
| -rw-r--r-- | src/frontend_common/update_checker.h | 2 |
2 files changed, 10 insertions, 45 deletions
diff --git a/src/frontend_common/update_checker.cpp b/src/frontend_common/update_checker.cpp index 1f01c25a26..71a94f38d4 100644 --- a/src/frontend_common/update_checker.cpp +++ b/src/frontend_common/update_checker.cpp @@ -80,55 +80,24 @@ std::optional<std::string> UpdateChecker::GetResponse(std::string url, std::stri } } -std::optional<UpdateChecker::Update> UpdateChecker::GetLatestRelease(bool include_prereleases) { +std::optional<UpdateChecker::Update> UpdateChecker::GetLatestRelease() { #ifdef YUZU_BUNDLED_OPENSSL const auto update_check_url = fmt::format("https://{}", Common::g_build_auto_update_api); #else const auto update_check_url = std::string{Common::g_build_auto_update_api}; #endif - auto update_check_path = fmt::format("{}{}", std::string{Common::g_build_auto_update_api_path}, - std::string{Common::g_build_auto_update_repo}); + auto update_check_path = std::string{Common::g_build_auto_update_api_path}; try { - if (include_prereleases) { // This can return either a prerelease or a stable release, - // whichever is more recent. - const auto update_check_tags_path = update_check_path + "/tags"; - const auto update_check_releases_path = update_check_path + "/releases"; + const auto response = UpdateChecker::GetResponse(update_check_url, update_check_path); - const auto tags_response = UpdateChecker::GetResponse(update_check_url, update_check_tags_path); - const auto releases_response = UpdateChecker::GetResponse(update_check_url, update_check_releases_path); - - if (!tags_response || !releases_response) - return {}; - - const std::string latest_tag - = nlohmann::json::parse(tags_response.value()).at(0).at("name"); - const std::string latest_name = - nlohmann::json::parse(releases_response.value()).at(0).at("name"); - - const bool latest_tag_has_release = releases_response.value().find( - fmt::format("\"{}\"", latest_tag)) - != std::string::npos; - - // If there is a newer tag, but that tag has no associated release, don't prompt the - // user to update. - if (!latest_tag_has_release) - return {}; - - return Update{latest_tag, latest_name}; - } else { // This is a stable release, only check for other stable releases. - update_check_path += "/releases/latest"; - const auto response = UpdateChecker::GetResponse(update_check_url, update_check_path); - - if (!response) - return {}; - - const std::string latest_tag = nlohmann::json::parse(response.value()).at("tag_name"); - const std::string latest_name = nlohmann::json::parse(response.value()).at("name"); + if (!response) + return {}; - return Update{latest_tag, latest_name}; - } + const std::string latest_tag = nlohmann::json::parse(response.value()).at("tag_name"); + const std::string latest_name = nlohmann::json::parse(response.value()).at("name"); + return Update{latest_tag, latest_name}; } catch (nlohmann::detail::out_of_range&) { LOG_ERROR(Frontend, "Parsing JSON response from {}{} failed during update check: " @@ -147,12 +116,8 @@ std::optional<UpdateChecker::Update> UpdateChecker::GetLatestRelease(bool includ } std::optional<UpdateChecker::Update> UpdateChecker::GetUpdate() { - const bool is_prerelease = ((strstr(Common::g_build_version, "pre-alpha") != NULL) || - (strstr(Common::g_build_version, "alpha") != NULL) || - (strstr(Common::g_build_version, "beta") != NULL) || - (strstr(Common::g_build_version, "rc") != NULL)); const std::optional<UpdateChecker::Update> latest_release_tag = - UpdateChecker::GetLatestRelease(is_prerelease); + UpdateChecker::GetLatestRelease(); if (!latest_release_tag) goto empty; diff --git a/src/frontend_common/update_checker.h b/src/frontend_common/update_checker.h index fb6c25c3f3..307c38f202 100644 --- a/src/frontend_common/update_checker.h +++ b/src/frontend_common/update_checker.h @@ -18,6 +18,6 @@ typedef struct { } Update; std::optional<std::string> GetResponse(std::string url, std::string path); -std::optional<Update> GetLatestRelease(bool include_prereleases); +std::optional<Update> GetLatestRelease(); std::optional<Update> GetUpdate(); } // namespace UpdateChecker |
