diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index fc68dd0223..6721f6e0e4 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -1253,8 +1253,9 @@ Specifies how the engine should check for updates. - [b]Disable Update Checks[/b] will block the engine from checking updates (see also [member network/connection/network_mode]). - - [b]Check Newest Preview[/b] (default for preview versions) will check for the newest available development snapshot. - - [b]Check Newest Stable[/b] (default for stable versions) will check for the newest available stable version. + - [b]Auto[/b] (default) will check for newest stable or unstable version, depending on which version are you currently using. Switch to another option if you want to lock in. + - [b]Check Newest Preview[/b] will check for the newest available development snapshot. + - [b]Check Newest Stable[/b] will check for the newest available stable version. - [b]Check Newest Patch[/b] will check for the latest available stable version, but only within the same minor version. E.g. if your version is [code]4.3.stable[/code], you will be notified about [code]4.3.1.stable[/code], but not [code]4.4.stable[/code]. All update modes will ignore builds with different major versions (e.g. Godot 4 -> Godot 5). diff --git a/editor/project_manager/engine_update_label.cpp b/editor/project_manager/engine_update_label.cpp index f4d4cf0e98..035535e971 100644 --- a/editor/project_manager/engine_update_label.cpp +++ b/editor/project_manager/engine_update_label.cpp @@ -31,6 +31,7 @@ #include "engine_update_label.h" #include "core/io/json.h" +#include "core/version.h" #include "editor/editor_string_names.h" #include "editor/settings/editor_settings.h" #include "scene/main/http_request.h" @@ -79,14 +80,16 @@ void EngineUpdateLabel::_http_request_completed(int p_result, int p_response_cod } UpdateMode update_mode = UpdateMode(int(EDITOR_GET("network/connection/check_for_updates"))); + if (update_mode == UpdateMode::AUTO) { + if (_get_version_type(GODOT_VERSION_STATUS) == VersionType::STABLE) { + update_mode = UpdateMode::NEWEST_STABLE; + } else { + update_mode = UpdateMode::NEWEST_UNSTABLE; + } + } bool stable_only = update_mode == UpdateMode::NEWEST_STABLE || update_mode == UpdateMode::NEWEST_PATCH; - const Dictionary current_version_info = Engine::get_singleton()->get_version_info(); - int current_major = current_version_info.get("major", 0); - int current_minor = current_version_info.get("minor", 0); - int current_patch = current_version_info.get("patch", 0); available_newer_version = String(); - for (const Variant &data_bit : version_array) { const Dictionary version_info = data_bit; @@ -98,7 +101,7 @@ void EngineUpdateLabel::_http_request_completed(int p_result, int p_response_cod } int minor = version_bits[1].to_int(); - if (version_bits[0].to_int() != current_major || minor < current_minor) { + if (version_bits[0].to_int() != GODOT_VERSION_MAJOR || minor < GODOT_VERSION_MINOR) { continue; } @@ -107,11 +110,11 @@ void EngineUpdateLabel::_http_request_completed(int p_result, int p_response_cod patch = version_bits[2].to_int(); } - if (minor == current_minor && patch < current_patch) { + if (minor == GODOT_VERSION_MINOR && patch < GODOT_VERSION_PATCH) { continue; } - if (update_mode == UpdateMode::NEWEST_PATCH && minor > current_minor) { + if (update_mode == UpdateMode::NEWEST_PATCH && minor > GODOT_VERSION_MINOR) { continue; } @@ -126,7 +129,7 @@ void EngineUpdateLabel::_http_request_completed(int p_result, int p_response_cod int release_index; VersionType release_type = _get_version_type(release_string, &release_index); - if (minor > current_minor || patch > current_patch) { + if (minor > GODOT_VERSION_MINOR || patch > GODOT_VERSION_PATCH) { if (stable_only && release_type != VersionType::STABLE) { continue; } @@ -136,7 +139,7 @@ void EngineUpdateLabel::_http_request_completed(int p_result, int p_response_cod } int current_version_index; - VersionType current_version_type = _get_version_type(current_version_info.get("status", "unknown"), ¤t_version_index); + VersionType current_version_type = _get_version_type(GODOT_VERSION_STATUS, ¤t_version_index); if (int(release_type) > int(current_version_type)) { break; diff --git a/editor/project_manager/engine_update_label.h b/editor/project_manager/engine_update_label.h index a424064eda..57a2025098 100644 --- a/editor/project_manager/engine_update_label.h +++ b/editor/project_manager/engine_update_label.h @@ -40,6 +40,7 @@ class EngineUpdateLabel : public LinkButton { public: enum class UpdateMode { DISABLED, + AUTO, NEWEST_UNSTABLE, NEWEST_STABLE, NEWEST_PATCH, @@ -86,7 +87,7 @@ private: void _set_message(const String &p_message, const Color &p_color); void _set_status(UpdateStatus p_status); - VersionType _get_version_type(const String &p_string, int *r_index) const; + VersionType _get_version_type(const String &p_string, int *r_index = nullptr) const; String _extract_sub_string(const String &p_line) const; protected: diff --git a/editor/settings/editor_settings.cpp b/editor/settings/editor_settings.cpp index f747bd757f..be11a88c22 100644 --- a/editor/settings/editor_settings.cpp +++ b/editor/settings/editor_settings.cpp @@ -480,11 +480,8 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/project_manager_screen", EditorSettings::InitialScreen::INITIAL_SCREEN_PRIMARY, project_manager_screen_hints) { - EngineUpdateLabel::UpdateMode default_update_mode = EngineUpdateLabel::UpdateMode::NEWEST_UNSTABLE; - if (String(GODOT_VERSION_STATUS) == String("stable")) { - default_update_mode = EngineUpdateLabel::UpdateMode::NEWEST_STABLE; - } - EDITOR_SETTING_BASIC(Variant::INT, PROPERTY_HINT_ENUM, "network/connection/check_for_updates", int(default_update_mode), "Disable Update Checks,Check Newest Preview,Check Newest Stable,Check Newest Patch"); // Uses EngineUpdateLabel::UpdateMode. + const String update_hint = vformat("Disable Update Checks,Auto (%s),Check Newest Preview,Check Newest Stable,Check Newest Patch", (str_compare(GODOT_VERSION_STATUS, "stable") == 0) ? "Stable" : "Preview"); + EDITOR_SETTING_BASIC(Variant::INT, PROPERTY_HINT_ENUM, "network/connection/check_for_updates", EngineUpdateLabel::UpdateMode::AUTO, update_hint); } EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/use_embedded_menu", false, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_EDITOR_BASIC_SETTING)