aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Fs
diff options
context:
space:
mode:
authormageven <62494521+mageven@users.noreply.github.com>2020-06-20 23:08:14 +0530
committerGitHub <noreply@github.com>2020-06-20 19:38:14 +0200
commit1c2af7ce926bd6f48309247dc65012d410d77bee (patch)
treed9c280ebdd4bda537abe39e953de08f47c50101a /Ryujinx.HLE/HOS/Services/Fs
parent4d56f97f1e62cf3d5a5de3088f5b755a7dcf5f51 (diff)
Implement aoc:u and support loading AddOnContent (#1221)
* Initial rebased AddOnContent support * Fix bounds calculation * Use existing GameCard in VFS per Xpl0itR's suggestion + Add dummy IPurchaseEventManager per AcK's suggestion * Support multiple containers * Add option to selectively disable addons * Import tickets from AOC FS * Load all nsps in base directory automatically * Revert LoadNsp renaming Removes conflicts with Mods PR. Not much is lost, old names were fine. * Address AcK's comments * Address Thog's comments Dispose opened nsp files Fix potential bug by clearing metadata on load
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Fs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs17
1 files changed, 13 insertions, 4 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs
index 35cf160f..6c843b27 100644
--- a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs
+++ b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs
@@ -372,17 +372,26 @@ namespace Ryujinx.HLE.HOS.Services.Fs
byte[] padding = context.RequestData.ReadBytes(7);
long titleId = context.RequestData.ReadInt64();
+ // We do a mitm here to find if the request is for an AOC.
+ // This is because AOC can be distributed over multiple containers in the emulator.
+ if (context.Device.System.ContentManager.GetAocDataStorage((ulong)titleId, out LibHac.Fs.IStorage aocStorage))
+ {
+ Logger.PrintInfo(LogClass.Loader, $"Opened AddOnContent Data TitleID={titleId:X16}");
+
+ MakeObject(context, new FileSystemProxy.IStorage(aocStorage));
+
+ return ResultCode.Success;
+ }
+
NcaContentType contentType = NcaContentType.Data;
- StorageId installedStorage =
- context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId);
+ StorageId installedStorage = context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId);
if (installedStorage == StorageId.None)
{
contentType = NcaContentType.PublicData;
- installedStorage =
- context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId);
+ installedStorage = context.Device.System.ContentManager.GetInstalledStorage(titleId, contentType, storageId);
}
if (installedStorage != StorageId.None)