aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE
diff options
context:
space:
mode:
authormageven <62494521+mageven@users.noreply.github.com>2020-08-30 22:21:53 +0530
committerGitHub <noreply@github.com>2020-08-30 18:51:53 +0200
commitb9398f1f3a13612a0bc3e64205cdb7eca3f48d4d (patch)
treedc4180e4d2f28d061776cf3fd00741f3fc8ee2fc /Ryujinx.HLE
parentf3e12d5b02ac77f0b4d8a0caf185c7afb578d0a4 (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.cs37
-rw-r--r--Ryujinx.HLE/HOS/ApplicationLoader.cs8
-rw-r--r--Ryujinx.HLE/HOS/ModLoader.cs8
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)