From 12f39befa973ddafdfe1fef10887887b6b2442f6 Mon Sep 17 00:00:00 2001 From: kobewi Date: Fri, 19 Apr 2024 00:09:15 +0200 Subject: [PATCH] Use minor version in EditorSettings file name --- editor/editor_settings.cpp | 33 ++++++++++++++++++++++++++++----- editor/editor_settings.h | 2 ++ main/main.cpp | 8 +++----- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 452715a577ea..cc44236192b9 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -989,6 +989,29 @@ EditorSettings *EditorSettings::get_singleton() { return singleton.ptr(); } +String EditorSettings::get_existing_settings_path() { + const String config_dir = EditorPaths::get_singleton()->get_config_dir(); + int minor = VERSION_MINOR; + String filename; + + do { + if (VERSION_MAJOR == 4 && minor < 3) { + // Minor version is used since 4.3, so special case to load older settings. + filename = vformat("editor_settings-%d.tres", VERSION_MAJOR); + minor = -1; + } else { + filename = vformat("editor_settings-%d.%d.tres", VERSION_MAJOR, minor); + minor--; + } + } while (minor >= 0 && !FileAccess::exists(config_dir.path_join(filename))); + return config_dir.path_join(filename); +} + +String EditorSettings::get_newest_settings_path() { + const String config_file_name = vformat("editor_settings-%d.%d.tres", VERSION_MAJOR, VERSION_MINOR); + return EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name); +} + void EditorSettings::create() { // IMPORTANT: create() *must* create a valid EditorSettings singleton, // as the rest of the engine code will assume it. As such, it should never @@ -1016,16 +1039,16 @@ void EditorSettings::create() { if (EditorPaths::get_singleton()->are_paths_valid()) { // Validate editor config file. - Ref dir = DirAccess::open(EditorPaths::get_singleton()->get_config_dir()); - ERR_FAIL_COND(dir.is_null()); + ERR_FAIL_COND(!DirAccess::dir_exists_absolute(EditorPaths::get_singleton()->get_config_dir())); - String config_file_name = "editor_settings-" + itos(VERSION_MAJOR) + ".tres"; - config_file_path = EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name); - if (!dir->file_exists(config_file_name)) { + config_file_path = get_existing_settings_path(); + if (!FileAccess::exists(config_file_path)) { + config_file_path = get_newest_settings_path(); goto fail; } singleton = ResourceLoader::load(config_file_path, "EditorSettings"); + singleton->set_path(get_newest_settings_path()); // Settings can be loaded from older version file, so make sure it's newest. if (singleton.is_null()) { ERR_PRINT("Could not load editor settings from path: " + config_file_path); diff --git a/editor/editor_settings.h b/editor/editor_settings.h index a058f91be8f4..6a329f697954 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -124,6 +124,8 @@ class EditorSettings : public Resource { }; static EditorSettings *get_singleton(); + static String get_existing_settings_path(); + static String get_newest_settings_path(); static void create(); void setup_language(); diff --git a/main/main.cpp b/main/main.cpp index 801e8934b0b0..78a539fff7d0 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -2518,12 +2518,10 @@ Error Main::setup2() { // Editor setting class is not available, load config directly. if (!init_use_custom_screen && (editor || project_manager) && EditorPaths::get_singleton()->are_paths_valid()) { - Ref dir = DirAccess::open(EditorPaths::get_singleton()->get_config_dir()); - ERR_FAIL_COND_V(dir.is_null(), FAILED); + ERR_FAIL_COND_V(!DirAccess::dir_exists_absolute(EditorPaths::get_singleton()->get_config_dir()), FAILED); - String config_file_name = "editor_settings-" + itos(VERSION_MAJOR) + ".tres"; - String config_file_path = EditorPaths::get_singleton()->get_config_dir().path_join(config_file_name); - if (dir->file_exists(config_file_name)) { + String config_file_path = EditorSettings::get_existing_settings_path(); + if (FileAccess::exists(config_file_path)) { Error err; Ref f = FileAccess::open(config_file_path, FileAccess::READ, &err); if (f.is_valid()) {