Merge pull request #53580 from RandomShaper/improve_cache_funcs
This commit is contained in:
commit
ab9c1574d0
7 changed files with 41 additions and 18 deletions
|
@ -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 ".";
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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...
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue