From 3d08957e1c7b16c823985db7e3fd82d5d4bbb328 Mon Sep 17 00:00:00 2001 From: crueter Date: Sun, 1 Feb 2026 13:12:19 -0500 Subject: [PATCH] [frontend] Fix nightly update checker Splitting Signed-off-by: crueter --- CMakeModules/GenerateSCMRev.cmake | 30 ++++++++------ src/android/app/src/main/jni/native.cpp | 52 +++++++++++++++++++------ src/common/scm_rev.cpp.in | 3 ++ src/common/scm_rev.h | 5 ++- src/yuzu/main_window.cpp | 30 +++++++++++++- 5 files changed, 94 insertions(+), 26 deletions(-) diff --git a/CMakeModules/GenerateSCMRev.cmake b/CMakeModules/GenerateSCMRev.cmake index 2cf8417d8a..f91a207dfd 100644 --- a/CMakeModules/GenerateSCMRev.cmake +++ b/CMakeModules/GenerateSCMRev.cmake @@ -8,20 +8,26 @@ include(GetSCMRev) function(get_timestamp _var) - string(TIMESTAMP timestamp UTC) - set(${_var} "${timestamp}" PARENT_SCOPE) + string(TIMESTAMP timestamp UTC) + set(${_var} "${timestamp}" PARENT_SCOPE) endfunction() get_timestamp(BUILD_DATE) if (DEFINED GIT_RELEASE) - set(BUILD_VERSION "${GIT_TAG}") - set(GIT_REFSPEC "${GIT_RELEASE}") - set(IS_DEV_BUILD false) + set(BUILD_VERSION "${GIT_TAG}") + set(GIT_REFSPEC "${GIT_RELEASE}") + set(IS_DEV_BUILD false) else() - string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION) - set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}") - set(IS_DEV_BUILD true) + string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION) + set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}") + set(IS_DEV_BUILD true) +endif() + +if (NIGHTLY_BUILD) + set(IS_NIGHTLY_BUILD true) +else() + set(IS_NIGHTLY_BUILD false) endif() set(GIT_DESC ${BUILD_VERSION}) @@ -34,11 +40,11 @@ set(BUILD_AUTO_UPDATE_WEBSITE "https://github.com") set(BUILD_AUTO_UPDATE_API "http://api.github.com") if (NIGHTLY_BUILD) - set(BUILD_AUTO_UPDATE_REPO "Eden-CI/Nightly") - set(REPO_NAME "Eden Nightly") + set(BUILD_AUTO_UPDATE_REPO "Eden-CI/Nightly") + set(REPO_NAME "Eden Nightly") else() - set(BUILD_AUTO_UPDATE_REPO "eden-emulator/Releases") - set(REPO_NAME "Eden") + set(BUILD_AUTO_UPDATE_REPO "eden-emulator/Releases") + set(REPO_NAME "Eden") endif() set(BUILD_ID ${GIT_REFSPEC}) diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 550befa85c..27eee78f01 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -4,6 +4,7 @@ // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#define ENABLE_UPDATE_CHECKER 1 #define VMA_IMPLEMENTATION #include "video_core/vulkan_common/vma.h" @@ -1615,23 +1616,52 @@ JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_isNightlyBuild( #endif } - #ifdef ENABLE_UPDATE_CHECKER -JNIEXPORT jobjectArray JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_checkForUpdate( - JNIEnv* env, - jobject obj) { - const bool is_prerelease = ((strstr(Common::g_build_version, "pre-alpha") != nullptr) || - (strstr(Common::g_build_version, "alpha") != nullptr) || - (strstr(Common::g_build_version, "beta") != nullptr) || - (strstr(Common::g_build_version, "rc") != nullptr)); - const std::optional release = +std::optional checkForUpdate() { + 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 latest_release_tag = UpdateChecker::GetLatestRelease(is_prerelease); - if (!release || release->tag == Common::g_build_version) { - return nullptr; + if (!latest_release_tag) + goto empty; + + { + std::string tag, build; + if (Common::g_is_nightly_build) { + std::vector result; + + boost::split(result, latest_release_tag->tag, boost::is_any_of(".")); + if (result.size() != 2) + goto empty; + tag = result[1]; + + boost::split(result, std::string{Common::g_build_version}, boost::is_any_of("-")); + if (result.empty()) + goto empty; + build = result[0]; + } else { + tag = latest_release_tag->tag; + build = Common::g_build_version; + } + + if (tag != build) + return latest_release_tag.value(); } + empty: + return std::nullopt; +} + +JNIEXPORT jobjectArray JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_checkForUpdate( + JNIEnv* env, + jobject obj) { + std::optional release = checkForUpdate(); + if (!release) return nullptr; + const std::string tag = release->tag; const std::string name = release->name; diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in index 60c9c119f9..b3d9455853 100644 --- a/src/common/scm_rev.cpp.in +++ b/src/common/scm_rev.cpp.in @@ -21,6 +21,7 @@ #define BUILD_AUTO_UPDATE_WEBSITE "@BUILD_AUTO_UPDATE_WEBSITE@" #define BUILD_AUTO_UPDATE_API "@BUILD_AUTO_UPDATE_API@" #define BUILD_AUTO_UPDATE_REPO "@BUILD_AUTO_UPDATE_REPO@" +#define IS_NIGHTLY_BUILD @IS_NIGHTLY_BUILD@ namespace Common { @@ -35,7 +36,9 @@ constexpr const char g_build_id[] = BUILD_ID; constexpr const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE; constexpr const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING; constexpr const char g_compiler_id[] = COMPILER_ID; + constexpr const bool g_is_dev_build = IS_DEV_BUILD; +constexpr const bool g_is_nightly_build = IS_NIGHTLY_BUILD; constexpr const char g_build_auto_update_website[] = BUILD_AUTO_UPDATE_WEBSITE; constexpr const char g_build_auto_update_api[] = BUILD_AUTO_UPDATE_API; diff --git a/src/common/scm_rev.h b/src/common/scm_rev.h index b89de95a3d..8c4338aaa8 100644 --- a/src/common/scm_rev.h +++ b/src/common/scm_rev.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2014 Citra Emulator Project @@ -20,7 +20,10 @@ extern const char g_title_bar_format_idle[]; extern const char g_title_bar_format_running[]; extern const char g_shader_cache_version[]; extern const char g_compiler_id[]; + extern const bool g_is_dev_build; +extern const bool g_is_nightly_build; + extern const char g_build_auto_update_website[]; extern const char g_build_auto_update_api[]; extern const char g_build_auto_update_repo[]; diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index e3cd3f583c..5ab7f0321e 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later // Qt on macOS doesn't define VMA shit +#include #include "qt_common/qt_string_lookup.h" #if defined(QT_STATICPLUGIN) && !defined(__APPLE__) #undef VMA_IMPLEMENTATION @@ -523,9 +524,34 @@ MainWindow::MainWindow(bool has_broken_vulkan) (strstr(Common::g_build_version, "rc") != NULL)); const std::optional latest_release_tag = UpdateChecker::GetLatestRelease(is_prerelease); - if (latest_release_tag && latest_release_tag->tag != Common::g_build_version) { - return latest_release_tag.value(); + + if (!latest_release_tag) + goto empty; + + { + std::string tag, build; + if (Common::g_is_nightly_build) { + std::vector result; + + boost::split(result, latest_release_tag->tag, boost::is_any_of(".")); + if (result.size() != 2) + goto empty; + tag = result[1]; + + boost::split(result, std::string{Common::g_build_version}, boost::is_any_of("-")); + if (result.empty()) + goto empty; + build = result[0]; + } else { + tag = latest_release_tag->tag; + build = Common::g_build_version; + } + + if (tag != build) + return latest_release_tag.value(); } + + empty: return UpdateChecker::Update{}; }); update_watcher.connect(&update_watcher, &QFutureWatcher::finished, this,