diff options
Diffstat (limited to 'src/common/fs/path_util.cpp')
| -rw-r--r-- | src/common/fs/path_util.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/common/fs/path_util.cpp b/src/common/fs/path_util.cpp index ca755b053..e026a13d9 100644 --- a/src/common/fs/path_util.cpp +++ b/src/common/fs/path_util.cpp | |||
| @@ -6,6 +6,9 @@ | |||
| 6 | #include <unordered_map> | 6 | #include <unordered_map> |
| 7 | 7 | ||
| 8 | #include "common/fs/fs.h" | 8 | #include "common/fs/fs.h" |
| 9 | #ifdef ANDROID | ||
| 10 | #include "common/fs/fs_android.h" | ||
| 11 | #endif | ||
| 9 | #include "common/fs/fs_paths.h" | 12 | #include "common/fs/fs_paths.h" |
| 10 | #include "common/fs/path_util.h" | 13 | #include "common/fs/path_util.h" |
| 11 | #include "common/logging/log.h" | 14 | #include "common/logging/log.h" |
| @@ -80,9 +83,7 @@ public: | |||
| 80 | yuzu_paths.insert_or_assign(yuzu_path, new_path); | 83 | yuzu_paths.insert_or_assign(yuzu_path, new_path); |
| 81 | } | 84 | } |
| 82 | 85 | ||
| 83 | private: | 86 | void Reinitialize(fs::path yuzu_path = {}) { |
| 84 | PathManagerImpl() { | ||
| 85 | fs::path yuzu_path; | ||
| 86 | fs::path yuzu_path_cache; | 87 | fs::path yuzu_path_cache; |
| 87 | fs::path yuzu_path_config; | 88 | fs::path yuzu_path_config; |
| 88 | 89 | ||
| @@ -96,12 +97,9 @@ private: | |||
| 96 | yuzu_path_cache = yuzu_path / CACHE_DIR; | 97 | yuzu_path_cache = yuzu_path / CACHE_DIR; |
| 97 | yuzu_path_config = yuzu_path / CONFIG_DIR; | 98 | yuzu_path_config = yuzu_path / CONFIG_DIR; |
| 98 | #elif ANDROID | 99 | #elif ANDROID |
| 99 | // On Android internal storage is mounted as "/sdcard" | 100 | ASSERT(!yuzu_path.empty()); |
| 100 | if (Exists("/sdcard")) { | 101 | yuzu_path_cache = yuzu_path / CACHE_DIR; |
| 101 | yuzu_path = "/sdcard/yuzu-emu"; | 102 | yuzu_path_config = yuzu_path / CONFIG_DIR; |
| 102 | yuzu_path_cache = yuzu_path / CACHE_DIR; | ||
| 103 | yuzu_path_config = yuzu_path / CONFIG_DIR; | ||
| 104 | } | ||
| 105 | #else | 103 | #else |
| 106 | yuzu_path = GetCurrentDir() / PORTABLE_DIR; | 104 | yuzu_path = GetCurrentDir() / PORTABLE_DIR; |
| 107 | 105 | ||
| @@ -129,6 +127,11 @@ private: | |||
| 129 | GenerateYuzuPath(YuzuPath::TASDir, yuzu_path / TAS_DIR); | 127 | GenerateYuzuPath(YuzuPath::TASDir, yuzu_path / TAS_DIR); |
| 130 | } | 128 | } |
| 131 | 129 | ||
| 130 | private: | ||
| 131 | PathManagerImpl() { | ||
| 132 | Reinitialize(); | ||
| 133 | } | ||
| 134 | |||
| 132 | ~PathManagerImpl() = default; | 135 | ~PathManagerImpl() = default; |
| 133 | 136 | ||
| 134 | void GenerateYuzuPath(YuzuPath yuzu_path, const fs::path& new_path) { | 137 | void GenerateYuzuPath(YuzuPath yuzu_path, const fs::path& new_path) { |
| @@ -217,6 +220,10 @@ fs::path RemoveTrailingSeparators(const fs::path& path) { | |||
| 217 | return fs::path{string_path}; | 220 | return fs::path{string_path}; |
| 218 | } | 221 | } |
| 219 | 222 | ||
| 223 | void SetAppDirectory(const std::string& app_directory) { | ||
| 224 | PathManagerImpl::GetInstance().Reinitialize(app_directory); | ||
| 225 | } | ||
| 226 | |||
| 220 | const fs::path& GetYuzuPath(YuzuPath yuzu_path) { | 227 | const fs::path& GetYuzuPath(YuzuPath yuzu_path) { |
| 221 | return PathManagerImpl::GetInstance().GetYuzuPathImpl(yuzu_path); | 228 | return PathManagerImpl::GetInstance().GetYuzuPathImpl(yuzu_path); |
| 222 | } | 229 | } |
| @@ -357,6 +364,12 @@ std::vector<std::string> SplitPathComponents(std::string_view filename) { | |||
| 357 | 364 | ||
| 358 | std::string SanitizePath(std::string_view path_, DirectorySeparator directory_separator) { | 365 | std::string SanitizePath(std::string_view path_, DirectorySeparator directory_separator) { |
| 359 | std::string path(path_); | 366 | std::string path(path_); |
| 367 | #ifdef ANDROID | ||
| 368 | if (Android::IsContentUri(path)) { | ||
| 369 | return path; | ||
| 370 | } | ||
| 371 | #endif // ANDROID | ||
| 372 | |||
| 360 | char type1 = directory_separator == DirectorySeparator::BackwardSlash ? '/' : '\\'; | 373 | char type1 = directory_separator == DirectorySeparator::BackwardSlash ? '/' : '\\'; |
| 361 | char type2 = directory_separator == DirectorySeparator::BackwardSlash ? '\\' : '/'; | 374 | char type2 = directory_separator == DirectorySeparator::BackwardSlash ? '\\' : '/'; |
| 362 | 375 | ||