From 21ad630e115ad12fa415d6fb6d63b55ef0993b1e Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 7 May 2021 19:36:32 +0200 Subject: [PATCH] Expose OS data directory getter methods This can be used by editor plugins and non-game applications to store data in the correct directories according to the XDG Base Directory specification. --- core/bind/core_bind.cpp | 18 ++++++++++++++++++ core/bind/core_bind.h | 3 +++ doc/classes/OS.xml | 25 +++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index f7e140da4b6d..619825709186 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -1085,6 +1085,21 @@ int64_t _OS::get_native_handle(HandleType p_handle_type) { return (int64_t)OS::get_singleton()->get_native_handle(p_handle_type); } +String _OS::get_config_dir() const { + // Exposed as `get_config_dir()` instead of `get_config_path()` for consistency with other exposed OS methods. + return OS::get_singleton()->get_config_path(); +} + +String _OS::get_data_dir() const { + // Exposed as `get_data_dir()` instead of `get_data_path()` for consistency with other exposed OS methods. + return OS::get_singleton()->get_data_path(); +} + +String _OS::get_cache_dir() const { + // Exposed as `get_cache_dir()` instead of `get_cache_path()` for consistency with other exposed OS methods. + return OS::get_singleton()->get_cache_path(); +} + bool _OS::is_debug_build() const { #ifdef DEBUG_ENABLED return true; @@ -1321,6 +1336,9 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_user_data_dir"), &_OS::get_user_data_dir); ClassDB::bind_method(D_METHOD("get_external_data_dir"), &_OS::get_external_data_dir); ClassDB::bind_method(D_METHOD("get_system_dir", "dir"), &_OS::get_system_dir); + ClassDB::bind_method(D_METHOD("get_config_dir"), &_OS::get_config_dir); + ClassDB::bind_method(D_METHOD("get_data_dir"), &_OS::get_data_dir); + ClassDB::bind_method(D_METHOD("get_cache_dir"), &_OS::get_cache_dir); ClassDB::bind_method(D_METHOD("get_unique_id"), &_OS::get_unique_id); ClassDB::bind_method(D_METHOD("is_ok_left_and_cancel_right"), &_OS::is_ok_left_and_cancel_right); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 4e6ee42bb0b0..e03b26df3764 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -351,6 +351,9 @@ class _OS : public Object { String get_user_data_dir() const; String get_external_data_dir() const; + String get_config_dir() const; + String get_data_dir() const; + String get_cache_dir() const; void alert(const String &p_alert, const String &p_title = "ALERT!"); diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index 66fa189fe318..7e5fe6226354 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -150,6 +150,14 @@ Returns the audio driver name for the given index. + + + + + Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir]. + Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path. + + @@ -168,6 +176,14 @@ [/codeblock] + + + + + Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir]. + Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path. + + @@ -184,6 +200,14 @@ Returns the currently used video driver, using one of the values from [enum VideoDriver]. + + + + + Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir]. + Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path. + + @@ -570,6 +594,7 @@ On macOS, this is [code]~/Library/Application Support/Godot/app_userdata/[project_name][/code], or [code]~/Library/Application Support/[custom_name][/code] if [code]use_custom_user_dir[/code] is set. On Windows, this is [code]%APPDATA%\Godot\app_userdata\[project_name][/code], or [code]%APPDATA%\[custom_name][/code] if [code]use_custom_user_dir[/code] is set. [code]%APPDATA%[/code] expands to [code]%USERPROFILE%\AppData\Roaming[/code]. If the project name is empty, [code]user://[/code] falls back to [code]res://[/code]. + Not to be confused with [method get_data_dir], which returns the [i]global[/i] (non-project-specific) user data directory.