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
This commit is contained in:
parent
f3e12d5b02
commit
b9398f1f3a
15 changed files with 159 additions and 70 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue