Fix path handling in FileCache.

This commit is contained in:
Relintai 2022-07-02 19:58:06 +02:00
parent 02af86d362
commit 8840439f7a
2 changed files with 31 additions and 2 deletions

View File

@ -4,6 +4,7 @@
#include "core/os/file_access.h" #include "core/os/file_access.h"
#include "core/os/os.h" #include "core/os/os.h"
#include "core/print_string.h" #include "core/print_string.h"
#include "core/project_settings.h"
String FileCache::get_wwwroot() { String FileCache::get_wwwroot() {
return _wwwroot_orig; return _wwwroot_orig;
@ -13,7 +14,7 @@ void FileCache::set_wwwroot(const String &val) {
} }
String FileCache::get_wwwroot_abs() { String FileCache::get_wwwroot_abs() {
return _wwwroot_orig; return _wwwroot;
} }
int FileCache::get_cache_invalidation_time() { int FileCache::get_cache_invalidation_time() {
@ -74,15 +75,41 @@ String FileCache::wwwroot_get_file_orig_path(const int index) {
return _registered_files[index].orig_path; return _registered_files[index].orig_path;
} }
String FileCache::wwwroot_get_file_orig_path_abs(const int index) {
return get_wwwroot_abs() + wwwroot_get_file_orig_path(index);
}
void FileCache::wwwroot_refresh_cache() { void FileCache::wwwroot_refresh_cache() {
_lock.write_lock(); _lock.write_lock();
_registered_files.clear(); _registered_files.clear();
//TODO this should probably be a static method in DirAccess
if (_wwwroot_orig != "") { if (_wwwroot_orig != "") {
_wwwroot = DirAccess::get_full_path(_wwwroot_orig, DirAccess::ACCESS_FILESYSTEM); String path = _wwwroot_orig;
if (path.begins_with("res://")) {
if (ProjectSettings::get_singleton()) {
String resource_path = ProjectSettings::get_singleton()->get_resource_path();
if (resource_path != "") {
path = path.replace_first("res:/", resource_path);
} else {
path = path.replace_first("res://", "");
}
}
} else if (path.begins_with("user://")) {
String data_dir = OS::get_singleton()->get_user_data_dir();
if (data_dir != "") {
path = path.replace_first("user:/", data_dir);
} else {
path = path.replace_first("user://", "");
}
}
_wwwroot = DirAccess::get_full_path(path, DirAccess::ACCESS_FILESYSTEM);
_wwwroot = _wwwroot.path_clean_end_slash(); _wwwroot = _wwwroot.path_clean_end_slash();
wwwroot_evaluate_dir(_wwwroot); wwwroot_evaluate_dir(_wwwroot);
} }
@ -107,6 +134,7 @@ void FileCache::wwwroot_evaluate_dir(const String &path, const bool should_exist
String np = path + "/" + f; String np = path + "/" + f;
np = np.substr(_wwwroot.size() - 1, np.size() - _wwwroot.size()); np = np.substr(_wwwroot.size() - 1, np.size() - _wwwroot.size());
wwwroot_register_file(np); wwwroot_register_file(np);
} else { } else {
wwwroot_evaluate_dir(path + "/" + f); wwwroot_evaluate_dir(path + "/" + f);
} }

View File

@ -30,6 +30,7 @@ public:
//return -1 if does not exists //return -1 if does not exists
int wwwroot_get_file_index(const String &file_path); int wwwroot_get_file_index(const String &file_path);
String wwwroot_get_file_orig_path(const int index); String wwwroot_get_file_orig_path(const int index);
String wwwroot_get_file_orig_path_abs(const int index);
void wwwroot_refresh_cache(); void wwwroot_refresh_cache();
void wwwroot_evaluate_dir(const String &path, const bool should_exist = true); void wwwroot_evaluate_dir(const String &path, const bool should_exist = true);