Skip to content

Commit

Permalink
Use minor version in EditorSettings file name
Browse files Browse the repository at this point in the history
  • Loading branch information
KoBeWi committed Apr 18, 2024
1 parent 9bc49a6 commit 12f39be
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 10 deletions.
33 changes: 28 additions & 5 deletions editor/editor_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -1016,16 +1039,16 @@ void EditorSettings::create() {

if (EditorPaths::get_singleton()->are_paths_valid()) {
// Validate editor config file.
Ref<DirAccess> 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);
Expand Down
2 changes: 2 additions & 0 deletions editor/editor_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
8 changes: 3 additions & 5 deletions main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<DirAccess> 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<FileAccess> f = FileAccess::open(config_file_path, FileAccess::READ, &err);
if (f.is_valid()) {
Expand Down

0 comments on commit 12f39be

Please sign in to comment.