diff options
| author | mageven <62494521+mageven@users.noreply.github.com> | 2020-08-30 22:21:53 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-30 18:51:53 +0200 |
| commit | b9398f1f3a13612a0bc3e64205cdb7eca3f48d4d (patch) | |
| tree | dc4180e4d2f28d061776cf3fd00741f3fc8ee2fc /Ryujinx.HLE | |
| parent | f3e12d5b02ac77f0b4d8a0caf185c7afb578d0a4 (diff) | |
Allow launching with custom data directories (#1505)
* Allow launching with custom data directories
Don't load alternate keys when using custom directory
* Address gdkchan's comments
* Misc fixes to log levels
Added more enabled log levels by default
Moved successful config updation to Notice as
1. It's not a warning
2. Warnings could've been disabled by the config load and hence message
would be lost
Diffstat (limited to 'Ryujinx.HLE')
| -rw-r--r-- | Ryujinx.HLE/FileSystem/VirtualFileSystem.cs | 37 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/ApplicationLoader.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/ModLoader.cs | 8 |
3 files changed, 20 insertions, 33 deletions
diff --git a/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs b/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs index 58890995..a95c9c0f 100644 --- a/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs +++ b/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs @@ -4,6 +4,7 @@ using LibHac.Fs; using LibHac.FsService; using LibHac.FsSystem; using LibHac.Spl; +using Ryujinx.Common.Configuration; using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS; using System; @@ -13,11 +14,8 @@ namespace Ryujinx.HLE.FileSystem { public class VirtualFileSystem : IDisposable { - public const string BasePath = "Ryujinx"; - public const string NandPath = "bis"; - public const string SdCardPath = "sdcard"; - public const string SystemPath = "system"; - public const string ModsPath = "mods"; + public const string NandPath = AppDataManager.DefaultNandDir; + public const string SdCardPath = AppDataManager.DefaultSdcardDir; public static string SafeNandPath = Path.Combine(NandPath, "safe"); public static string SystemNandPath = Path.Combine(NandPath, "system"); @@ -77,20 +75,10 @@ namespace Ryujinx.HLE.FileSystem return fullPath; } - public string GetBaseModsPath() - { - var baseModsDir = Path.Combine(GetBasePath(), "mods"); - ModLoader.EnsureBaseDirStructure(baseModsDir); - - return baseModsDir; - } - - public string GetSdCardPath() => MakeFullPath(SdCardPath); - + internal string GetBasePath() => AppDataManager.BaseDirPath; + internal string GetSdCardPath() => MakeFullPath(SdCardPath); public string GetNandPath() => MakeFullPath(NandPath); - public string GetSystemPath() => MakeFullPath(SystemPath); - internal string GetSavePath(ServiceCtx context, SaveInfo saveInfo, bool isDirectory = true) { string saveUserPath = ""; @@ -207,13 +195,6 @@ namespace Ryujinx.HLE.FileSystem return new DriveInfo(Path.GetPathRoot(GetBasePath())); } - public string GetBasePath() - { - string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); - - return Path.Combine(appDataPath, BasePath); - } - public void Reload() { ReloadKeySet(); @@ -245,10 +226,12 @@ namespace Ryujinx.HLE.FileSystem string titleKeyFile = null; string consoleKeyFile = null; - string home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + if (!AppDataManager.IsCustomBasePath) + { + LoadSetAtPath(AppDataManager.KeysDirPathAlt); + } - LoadSetAtPath(Path.Combine(home, ".switch")); - LoadSetAtPath(GetSystemPath()); + LoadSetAtPath(AppDataManager.KeysDirPath); void LoadSetAtPath(string basePath) { diff --git a/Ryujinx.HLE/HOS/ApplicationLoader.cs b/Ryujinx.HLE/HOS/ApplicationLoader.cs index b6e17b7b..b52678de 100644 --- a/Ryujinx.HLE/HOS/ApplicationLoader.cs +++ b/Ryujinx.HLE/HOS/ApplicationLoader.cs @@ -69,7 +69,7 @@ namespace Ryujinx.HLE.HOS Npdm metaData = ReadNpdm(codeFs); - _fileSystem.ModLoader.CollectMods(TitleId, _fileSystem.GetBaseModsPath()); + _fileSystem.ModLoader.CollectMods(TitleId, _fileSystem.ModLoader.GetModsBasePath()); if (TitleId != 0) { @@ -224,7 +224,7 @@ namespace Ryujinx.HLE.HOS IFileSystem codeFs = null; // Load Update - string titleUpdateMetadataPath = Path.Combine(_fileSystem.GetBasePath(), "games", mainNca.Header.TitleId.ToString("x16"), "updates.json"); + string titleUpdateMetadataPath = Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "updates.json"); if (File.Exists(titleUpdateMetadataPath)) { @@ -261,7 +261,7 @@ namespace Ryujinx.HLE.HOS } // Load Aoc - string titleAocMetadataPath = Path.Combine(_fileSystem.GetBasePath(), "games", mainNca.Header.TitleId.ToString("x16"), "dlc.json"); + string titleAocMetadataPath = Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "dlc.json"); if (File.Exists(titleAocMetadataPath)) { @@ -310,7 +310,7 @@ namespace Ryujinx.HLE.HOS Npdm metaData = ReadNpdm(codeFs); - _fileSystem.ModLoader.CollectMods(TitleId, _fileSystem.GetBaseModsPath()); + _fileSystem.ModLoader.CollectMods(TitleId, _fileSystem.ModLoader.GetModsBasePath()); if (controlNca != null) { diff --git a/Ryujinx.HLE/HOS/ModLoader.cs b/Ryujinx.HLE/HOS/ModLoader.cs index 867d120f..786484ae 100644 --- a/Ryujinx.HLE/HOS/ModLoader.cs +++ b/Ryujinx.HLE/HOS/ModLoader.cs @@ -2,6 +2,7 @@ using LibHac.Common; using LibHac.Fs; using LibHac.FsSystem; using LibHac.FsSystem.RomFs; +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.HLE.Loaders.Mods; using Ryujinx.HLE.Loaders.Executables; @@ -105,15 +106,18 @@ namespace Ryujinx.HLE.HOS private static bool StrEquals(string s1, string s2) => string.Equals(s1, s2, StringComparison.OrdinalIgnoreCase); - public void EnsureBaseDirStructure(string modsBasePath) + public string GetModsBasePath() => EnsureBaseDirStructure(AppDataManager.GetModsPath()); + + private string EnsureBaseDirStructure(string modsBasePath) { var modsDir = new DirectoryInfo(modsBasePath); - modsDir.Create(); modsDir.CreateSubdirectory(AmsContentsDir); modsDir.CreateSubdirectory(AmsNsoPatchDir); modsDir.CreateSubdirectory(AmsNroPatchDir); // modsDir.CreateSubdirectory(AmsKipPatchDir); // uncomment when KIPs are supported + + return modsDir.FullName; } private static DirectoryInfo FindTitleDir(DirectoryInfo contentsDir, string titleId) |
