diff options
author | Yuri Sizov <yuris@humnom.net> | 2023-12-19 13:00:54 +0100 |
---|---|---|
committer | Yuri Sizov <yuris@humnom.net> | 2023-12-19 13:00:54 +0100 |
commit | 92e024aac50a539e304ae5945f3c0cf41fefc515 (patch) | |
tree | efe9f4904087b4843b2017eb20f0f4a90c3c5e3b | |
parent | bf8dd73e9d88d6ab146506699f43230b12c6a2b0 (diff) | |
parent | 3dc47b0b847e4c42aeb0fd5e2f569c543b4f97ab (diff) | |
download | redot-engine-92e024aac50a539e304ae5945f3c0cf41fefc515.tar.gz |
Merge pull request #79785 from KoBeWi/ioioioio
Load project metadata file only when needed
-rw-r--r-- | editor/editor_settings.cpp | 39 | ||||
-rw-r--r-- | editor/editor_settings.h | 2 |
2 files changed, 27 insertions, 14 deletions
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 1eaeee97a5..6f52793e32 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -884,6 +884,10 @@ bool EditorSettings::_is_default_text_editor_theme(String p_theme_name) { return p_theme_name == "default" || p_theme_name == "godot 2" || p_theme_name == "custom"; } +const String EditorSettings::_get_project_metadata_path() const { + return EditorPaths::get_singleton()->get_project_settings_dir().path_join("project_metadata.cfg"); +} + // PUBLIC METHODS EditorSettings *EditorSettings::get_singleton() { @@ -1171,24 +1175,31 @@ void EditorSettings::add_property_hint(const PropertyInfo &p_hint) { // Metadata void EditorSettings::set_project_metadata(const String &p_section, const String &p_key, Variant p_data) { - Ref<ConfigFile> cf = memnew(ConfigFile); - String path = EditorPaths::get_singleton()->get_project_settings_dir().path_join("project_metadata.cfg"); - Error err; - err = cf->load(path); - ERR_FAIL_COND_MSG(err != OK && err != ERR_FILE_NOT_FOUND, "Cannot load editor settings from file '" + path + "'."); - cf->set_value(p_section, p_key, p_data); - err = cf->save(path); - ERR_FAIL_COND_MSG(err != OK, "Cannot save editor settings to file '" + path + "'."); + const String path = _get_project_metadata_path(); + + if (project_metadata.is_null()) { + project_metadata.instantiate(); + + Error err = project_metadata->load(path); + if (err != OK && err != ERR_FILE_NOT_FOUND) { + ERR_PRINT("Cannot load project metadata from file '" + path + "'."); + } + } + project_metadata->set_value(p_section, p_key, p_data); + + Error err = project_metadata->save(path); + ERR_FAIL_COND_MSG(err != OK, "Cannot save project metadata to file '" + path + "'."); } Variant EditorSettings::get_project_metadata(const String &p_section, const String &p_key, Variant p_default) const { - Ref<ConfigFile> cf = memnew(ConfigFile); - String path = EditorPaths::get_singleton()->get_project_settings_dir().path_join("project_metadata.cfg"); - Error err = cf->load(path); - if (err != OK) { - return p_default; + if (project_metadata.is_null()) { + project_metadata.instantiate(); + + const String path = _get_project_metadata_path(); + Error err = project_metadata->load(path); + ERR_FAIL_COND_V_MSG(err != OK && err != ERR_FILE_NOT_FOUND, p_default, "Cannot load project metadata from file '" + path + "'."); } - return cf->get_value(p_section, p_key, p_default); + return project_metadata->get_value(p_section, p_key, p_default); } void EditorSettings::set_favorites(const Vector<String> &p_favorites) { diff --git a/editor/editor_settings.h b/editor/editor_settings.h index 660a9501a2..c3ce790e0e 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -79,6 +79,7 @@ private: HashSet<String> changed_settings; + mutable Ref<ConfigFile> project_metadata; HashMap<String, PropertyInfo> hints; HashMap<String, VariantContainer> props; int last_order; @@ -106,6 +107,7 @@ private: void _load_godot2_text_editor_theme(); bool _save_text_editor_theme(String p_file); bool _is_default_text_editor_theme(String p_theme_name); + const String _get_project_metadata_path() const; protected: static void _bind_methods(); |