Merge pull request #53580 from RandomShaper/improve_cache_funcs

This commit is contained in:
Rémi Verschelde 2021-10-09 13:40:53 +02:00 committed by GitHub
commit ab9c1574d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 41 additions and 18 deletions

View file

@ -230,10 +230,13 @@ String OS_Android::get_user_data_dir() const {
} }
String OS_Android::get_cache_path() const { String OS_Android::get_cache_path() const {
if (cache_dir_cache != String())
return cache_dir_cache;
String cache_dir = godot_io_java->get_cache_dir(); String cache_dir = godot_io_java->get_cache_dir();
if (cache_dir != "") { if (cache_dir != "") {
cache_dir = _remove_symlink(cache_dir); cache_dir_cache = _remove_symlink(cache_dir);
return cache_dir; return cache_dir_cache;
} }
return "."; return ".";
} }

View file

@ -57,6 +57,7 @@ private:
#endif #endif
mutable String data_dir_cache; mutable String data_dir_cache;
mutable String cache_dir_cache;
AudioDriverOpenSL audio_driver_android; AudioDriverOpenSL audio_driver_android;

View file

@ -44,7 +44,7 @@
extern int gargc; extern int gargc;
extern char **gargv; extern char **gargv;
extern int iphone_main(int, char **, String); extern int iphone_main(int, char **, String, String);
extern void iphone_finish(); extern void iphone_finish();
@implementation AppDelegate @implementation AppDelegate
@ -67,8 +67,10 @@ static ViewController *mainViewController = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *documentsDirectory = [paths objectAtIndex:0];
paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
int err = iphone_main(gargc, gargv, String::utf8([documentsDirectory UTF8String])); int err = iphone_main(gargc, gargv, String::utf8([documentsDirectory UTF8String]), String::utf8([cacheDirectory UTF8String]));
if (err != 0) { if (err != 0) {
// bail, things did not go very well for us, should probably output a message on screen with our error code... // bail, things did not go very well for us, should probably output a message on screen with our error code...

View file

@ -74,7 +74,7 @@ int add_cmdline(int p_argc, char **p_args) {
return p_argc; return p_argc;
}; };
int iphone_main(int argc, char **argv, String data_dir) { int iphone_main(int argc, char **argv, String data_dir, String cache_dir) {
size_t len = strlen(argv[0]); size_t len = strlen(argv[0]);
while (len--) { while (len--) {
@ -95,7 +95,7 @@ int iphone_main(int argc, char **argv, String data_dir) {
char cwd[512]; char cwd[512];
getcwd(cwd, sizeof(cwd)); getcwd(cwd, sizeof(cwd));
printf("cwd %s\n", cwd); printf("cwd %s\n", cwd);
os = new OSIPhone(data_dir); os = new OSIPhone(data_dir, cache_dir);
// We must override main when testing is enabled // We must override main when testing is enabled
TEST_MAIN_OVERRIDE TEST_MAIN_OVERRIDE

View file

@ -72,6 +72,7 @@ private:
virtual void finalize() override; virtual void finalize() override;
String user_data_dir; String user_data_dir;
String cache_dir;
bool is_focused = false; bool is_focused = false;
@ -80,7 +81,7 @@ private:
public: public:
static OSIPhone *get_singleton(); static OSIPhone *get_singleton();
OSIPhone(String p_data_dir); OSIPhone(String p_data_dir, String p_cache_dir);
~OSIPhone(); ~OSIPhone();
void initialize_modules(); void initialize_modules();
@ -103,6 +104,8 @@ public:
void set_user_data_dir(String p_dir); void set_user_data_dir(String p_dir);
virtual String get_user_data_dir() const override; virtual String get_user_data_dir() const override;
virtual String get_cache_path() const override;
virtual String get_locale() const override; virtual String get_locale() const override;
virtual String get_unique_id() const override; virtual String get_unique_id() const override;

View file

@ -87,7 +87,7 @@ OSIPhone *OSIPhone::get_singleton() {
return (OSIPhone *)OS::get_singleton(); return (OSIPhone *)OS::get_singleton();
} }
OSIPhone::OSIPhone(String p_data_dir) { OSIPhone::OSIPhone(String p_data_dir, String p_cache_dir) {
for (int i = 0; i < ios_init_callbacks_count; ++i) { for (int i = 0; i < ios_init_callbacks_count; ++i) {
ios_init_callbacks[i](); ios_init_callbacks[i]();
} }
@ -101,6 +101,7 @@ OSIPhone::OSIPhone(String p_data_dir) {
// can't call set_data_dir from here, since it requires DirAccess // can't call set_data_dir from here, since it requires DirAccess
// which is initialized in initialize_core // which is initialized in initialize_core
user_data_dir = p_data_dir; user_data_dir = p_data_dir;
cache_dir = p_cache_dir;
Vector<Logger *> loggers; Vector<Logger *> loggers;
loggers.push_back(memnew(SyslogLogger)); loggers.push_back(memnew(SyslogLogger));
@ -266,6 +267,10 @@ String OSIPhone::get_user_data_dir() const {
return user_data_dir; return user_data_dir;
} }
String OSIPhone::get_cache_path() const {
return cache_dir;
}
String OSIPhone::get_locale() const { String OSIPhone::get_locale() const {
NSString *preferedLanguage = [NSLocale preferredLanguages].firstObject; NSString *preferedLanguage = [NSLocale preferredLanguages].firstObject;

View file

@ -677,18 +677,27 @@ String OS_Windows::get_data_path() const {
} }
String OS_Windows::get_cache_path() const { String OS_Windows::get_cache_path() const {
static String cache_path_cache;
if (cache_path_cache.is_empty()) {
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well. // The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
if (has_environment("XDG_CACHE_HOME")) { if (has_environment("XDG_CACHE_HOME")) {
if (get_environment("XDG_CACHE_HOME").is_absolute_path()) { if (get_environment("XDG_CACHE_HOME").is_absolute_path()) {
return get_environment("XDG_CACHE_HOME").replace("\\", "/"); cache_path_cache = get_environment("XDG_CACHE_HOME").replace("\\", "/");
} else { } else {
WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `%TEMP%` or `get_config_path()` per the XDG Base Directory specification."); WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `%LOCALAPPDATA%\\cache`, `%TEMP%` or `get_config_path()` per the XDG Base Directory specification.");
} }
} }
if (has_environment("TEMP")) { if (cache_path_cache.is_empty() && has_environment("LOCALAPPDATA")) {
return get_environment("TEMP").replace("\\", "/"); cache_path_cache = get_environment("LOCALAPPDATA").replace("\\", "/");
} }
return get_config_path(); if (cache_path_cache.is_empty() && has_environment("TEMP")) {
cache_path_cache = get_environment("TEMP").replace("\\", "/");
}
if (cache_path_cache.is_empty()) {
cache_path_cache = get_config_path();
}
}
return cache_path_cache;
} }
// Get properly capitalized engine name for system paths // Get properly capitalized engine name for system paths