diff --git a/Common/File/AndroidContentURI.cpp b/Common/File/AndroidContentURI.cpp index 65526285ecf8..9d68b34a625b 100644 --- a/Common/File/AndroidContentURI.cpp +++ b/Common/File/AndroidContentURI.cpp @@ -141,6 +141,9 @@ std::string AndroidContentURI::GetLastPart() const { if (colon == std::string::npos) { return std::string(); } + if (file.back() == ':') { + return file; + } return file.substr(colon + 1); } diff --git a/Core/FileSystems/DirectoryFileSystem.cpp b/Core/FileSystems/DirectoryFileSystem.cpp index f6b5659243e6..4e700d4a3acf 100644 --- a/Core/FileSystems/DirectoryFileSystem.cpp +++ b/Core/FileSystems/DirectoryFileSystem.cpp @@ -46,6 +46,7 @@ #include "Core/System.h" #include "Core/Replay.h" #include "Core/Reporting.h" +#include "Core/ELF/ParamSFO.h" #ifdef _WIN32 #include "Common/CommonWindows.h" @@ -830,9 +831,22 @@ std::vector DirectoryFileSystem::GetDirListing(const std::string &p } else { entry.name = file.name; } - if (hideISOFiles && (endsWithNoCase(entry.name, ".cso") || endsWithNoCase(entry.name, ".iso"))) { - // Workaround for DJ Max Portable, see compat.ini. - continue; + if (hideISOFiles) { + if (endsWithNoCase(entry.name, ".cso") || endsWithNoCase(entry.name, ".iso")) { + // Workaround for DJ Max Portable, see compat.ini. + continue; + } else if (file.isDirectory) { + if (endsWithNoCase(path, "SAVEDATA")) { + // Don't let it see savedata from other games, it can misinterpret stuff. + std::string gameID = g_paramSFO.GetDiscID(); + if (entry.name.size() > 2 && !startsWithNoCase(entry.name, gameID)) { + continue; + } + } else if (file.name == "GAME" || file.name == "TEXTURES" || file.name == "PPSSPP_STATE" || equalsNoCase(file.name, "Cheats")) { + // The game scans these folders on startup which can take time. Skip them. + continue; + } + } } if (file.name == "..") { entry.size = 4096;