aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeModules/GenerateSCMRev.cmake30
-rw-r--r--src/android/app/src/main/jni/native.cpp14
-rw-r--r--src/common/scm_rev.cpp.in3
-rw-r--r--src/common/scm_rev.h5
-rw-r--r--src/frontend_common/update_checker.cpp46
-rw-r--r--src/frontend_common/update_checker.h1
-rw-r--r--src/yuzu/main_window.cpp22
-rw-r--r--src/yuzu/main_window.h4
8 files changed, 82 insertions, 43 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..37f195fe15 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -1615,22 +1615,14 @@ 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<UpdateChecker::Update> release =
- UpdateChecker::GetLatestRelease(is_prerelease);
-
- if (!release || release->tag == Common::g_build_version) {
- return nullptr;
- }
+ std::optional<UpdateChecker::Update> release = UpdateChecker::GetUpdate();
+ 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/frontend_common/update_checker.cpp b/src/frontend_common/update_checker.cpp
index 53f3ca942d..1d7c8a4492 100644
--- a/src/frontend_common/update_checker.cpp
+++ b/src/frontend_common/update_checker.cpp
@@ -5,10 +5,13 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
-#include "update_checker.h"
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
+
+#include <fmt/format.h>
#include "common/logging/log.h"
#include "common/scm_rev.h"
-#include <fmt/format.h>
+#include "update_checker.h"
#include <httplib.h>
@@ -137,3 +140,42 @@ std::optional<UpdateChecker::Update> UpdateChecker::GetLatestRelease(bool includ
return {};
}
}
+
+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);
+
+ if (!latest_release_tag)
+ goto empty;
+
+ {
+ std::string tag, build;
+ if (Common::g_is_nightly_build) {
+ std::vector<std::string> 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{};
+
+}
diff --git a/src/frontend_common/update_checker.h b/src/frontend_common/update_checker.h
index 9dbb321eef..fb6c25c3f3 100644
--- a/src/frontend_common/update_checker.h
+++ b/src/frontend_common/update_checker.h
@@ -19,4 +19,5 @@ typedef struct {
std::optional<std::string> GetResponse(std::string url, std::string path);
std::optional<Update> GetLatestRelease(bool include_prereleases);
+std::optional<Update> GetUpdate();
} // namespace UpdateChecker
diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp
index e3cd3f583c..d50dcad994 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 <boost/algorithm/string/split.hpp>
#include "qt_common/qt_string_lookup.h"
#if defined(QT_STATICPLUGIN) && !defined(__APPLE__)
#undef VMA_IMPLEMENTATION
@@ -516,17 +517,8 @@ MainWindow::MainWindow(bool has_broken_vulkan)
#ifdef ENABLE_UPDATE_CHECKER
if (UISettings::values.check_for_updates) {
- update_future = QtConcurrent::run([]() -> UpdateChecker::Update {
- 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);
- if (latest_release_tag && latest_release_tag->tag != Common::g_build_version) {
- return latest_release_tag.value();
- }
- return UpdateChecker::Update{};
+ update_future = QtConcurrent::run([]() -> std::optional<UpdateChecker::Update> {
+ return UpdateChecker::GetUpdate();
});
update_watcher.connect(&update_watcher, &QFutureWatcher<QString>::finished, this,
&MainWindow::OnEmulatorUpdateAvailable);
@@ -4020,8 +4012,8 @@ void MainWindow::OnCaptureScreenshot() {
#ifdef ENABLE_UPDATE_CHECKER
void MainWindow::OnEmulatorUpdateAvailable() {
- UpdateChecker::Update version = update_future.result();
- if (version.tag.empty())
+ std::optional<UpdateChecker::Update> version = update_future.result();
+ if (!version)
return;
QMessageBox update_prompt(this);
@@ -4030,14 +4022,14 @@ void MainWindow::OnEmulatorUpdateAvailable() {
update_prompt.addButton(QMessageBox::Yes);
update_prompt.addButton(QMessageBox::Ignore);
update_prompt.setText(
- tr("Download %1?").arg(QString::fromStdString(version.name)));
+ tr("Download %1?").arg(QString::fromStdString(version->name)));
update_prompt.exec();
if (update_prompt.button(QMessageBox::Yes) == update_prompt.clickedButton()) {
auto const full_url = fmt::format("{}/{}/releases/tag/",
std::string{Common::g_build_auto_update_website},
std::string{Common::g_build_auto_update_repo}
);
- QDesktopServices::openUrl(QUrl(QString::fromStdString(full_url + version.tag)));
+ QDesktopServices::openUrl(QUrl(QString::fromStdString(full_url + version->tag)));
}
}
#endif
diff --git a/src/yuzu/main_window.h b/src/yuzu/main_window.h
index 351a581729..41c2f4fea0 100644
--- a/src/yuzu/main_window.h
+++ b/src/yuzu/main_window.h
@@ -472,8 +472,8 @@ private:
std::shared_ptr<InputCommon::InputSubsystem> input_subsystem;
#ifdef ENABLE_UPDATE_CHECKER
- QFuture<UpdateChecker::Update> update_future;
- QFutureWatcher<UpdateChecker::Update> update_watcher;
+ QFuture<std::optional<UpdateChecker::Update>> update_future;
+ QFutureWatcher<std::optional<UpdateChecker::Update>> update_watcher;
#endif
MultiplayerState* multiplayer_state = nullptr;