Implement get_cache_path() for iOS, and improve it for Android and Windows
This commit is contained in:
parent
5eb80bb1a3
commit
25f01cb09d
7 changed files with 41 additions and 18 deletions
|
@ -452,10 +452,13 @@ String OS_Android::get_user_data_dir() 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();
|
||||
if (cache_dir != "") {
|
||||
cache_dir = _remove_symlink(cache_dir);
|
||||
return cache_dir;
|
||||
cache_dir_cache = _remove_symlink(cache_dir);
|
||||
return cache_dir_cache;
|
||||
}
|
||||
return ".";
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ class OS_Android : public OS_Unix {
|
|||
VisualServer *visual_server;
|
||||
|
||||
mutable String data_dir_cache;
|
||||
mutable String cache_dir_cache;
|
||||
|
||||
AudioDriverOpenSL audio_driver_android;
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
extern int gargc;
|
||||
extern char **gargv;
|
||||
|
||||
extern int iphone_main(int, char **, String);
|
||||
extern int iphone_main(int, char **, String, String);
|
||||
extern void iphone_finish();
|
||||
|
||||
@implementation AppDelegate
|
||||
|
@ -63,8 +63,11 @@ static ViewController *mainViewController = nil;
|
|||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
|
||||
NSUserDomainMask, YES);
|
||||
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) {
|
||||
// bail, things did not go very well for us, should probably output a message on screen with our error code...
|
||||
exit(0);
|
||||
|
|
|
@ -70,7 +70,7 @@ int add_cmdline(int p_argc, char **p_args) {
|
|||
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]);
|
||||
|
||||
while (len--) {
|
||||
|
@ -90,7 +90,7 @@ int iphone_main(int argc, char **argv, String data_dir) {
|
|||
char cwd[512];
|
||||
getcwd(cwd, sizeof(cwd));
|
||||
printf("cwd %s\n", cwd);
|
||||
os = new OSIPhone(data_dir);
|
||||
os = new OSIPhone(data_dir, cache_dir);
|
||||
|
||||
char *fargv[64];
|
||||
for (int i = 0; i < argc; i++) {
|
||||
|
|
|
@ -81,6 +81,7 @@ private:
|
|||
void set_data_dir(String p_dir);
|
||||
|
||||
String data_dir;
|
||||
String cache_dir;
|
||||
|
||||
InputDefault *input;
|
||||
|
||||
|
@ -93,7 +94,7 @@ private:
|
|||
public:
|
||||
static OSIPhone *get_singleton();
|
||||
|
||||
OSIPhone(String p_data_dir);
|
||||
OSIPhone(String p_data_dir, String p_cache_dir);
|
||||
~OSIPhone();
|
||||
|
||||
bool iterate();
|
||||
|
@ -115,6 +116,7 @@ public:
|
|||
Error shell_open(String p_uri);
|
||||
|
||||
String get_user_data_dir() const;
|
||||
String get_cache_path() const;
|
||||
|
||||
String get_locale() const;
|
||||
|
||||
|
|
|
@ -494,6 +494,10 @@ String OSIPhone::get_clipboard() const {
|
|||
return String::utf8([text UTF8String]);
|
||||
}
|
||||
|
||||
String OSIPhone::get_cache_path() const {
|
||||
return cache_dir;
|
||||
}
|
||||
|
||||
String OSIPhone::get_model_name() const {
|
||||
String model = ios->get_model();
|
||||
if (model != "") {
|
||||
|
@ -668,7 +672,7 @@ void add_ios_init_callback(init_callback cb) {
|
|||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
ios_init_callbacks[i]();
|
||||
}
|
||||
|
@ -683,6 +687,7 @@ OSIPhone::OSIPhone(String p_data_dir) {
|
|||
// can't call set_data_dir from here, since it requires DirAccess
|
||||
// which is initialized in initialize_core
|
||||
data_dir = p_data_dir;
|
||||
cache_dir = p_cache_dir;
|
||||
|
||||
Vector<Logger *> loggers;
|
||||
loggers.push_back(memnew(SyslogLogger));
|
||||
|
|
|
@ -3378,18 +3378,27 @@ String OS_Windows::get_data_path() const {
|
|||
}
|
||||
|
||||
String OS_Windows::get_cache_path() const {
|
||||
// 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 (get_environment("XDG_CACHE_HOME").is_abs_path()) {
|
||||
return get_environment("XDG_CACHE_HOME").replace("\\", "/");
|
||||
} 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.");
|
||||
static String cache_path_cache;
|
||||
if (cache_path_cache == String()) {
|
||||
// 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 (get_environment("XDG_CACHE_HOME").is_abs_path()) {
|
||||
cache_path_cache = get_environment("XDG_CACHE_HOME").replace("\\", "/");
|
||||
} else {
|
||||
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 (cache_path_cache == String() && has_environment("LOCALAPPDATA")) {
|
||||
cache_path_cache = get_environment("LOCALAPPDATA").replace("\\", "/");
|
||||
}
|
||||
if (cache_path_cache == String() && has_environment("TEMP")) {
|
||||
cache_path_cache = get_environment("TEMP").replace("\\", "/");
|
||||
}
|
||||
if (cache_path_cache == String()) {
|
||||
cache_path_cache = get_config_path();
|
||||
}
|
||||
}
|
||||
if (has_environment("TEMP")) {
|
||||
return get_environment("TEMP").replace("\\", "/");
|
||||
}
|
||||
return get_config_path();
|
||||
return cache_path_cache;
|
||||
}
|
||||
|
||||
// Get properly capitalized engine name for system paths
|
||||
|
|
Loading…
Reference in a new issue