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
This commit is contained in:
mageven 2020-06-20 23:08:14 +05:30 committed by GitHub
parent 4d56f97f1e
commit 1c2af7ce92
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 317 additions and 14 deletions

View file

@ -146,6 +146,20 @@ namespace Ryujinx.HLE.HOS
_contentManager.LoadEntries(_device);
_contentManager.ClearAocData();
_contentManager.AddAocData(securePartition, xciFile, mainNca.Header.TitleId);
// Check all nsp's in the base directory for AOC
foreach (var fn in new FileInfo(xciFile).Directory.EnumerateFiles("*.nsp"))
{
using (FileStream fs = fn.OpenRead())
using (IStorage storage = fs.AsStorage())
using (PartitionFileSystem pfs = new PartitionFileSystem(storage))
{
_contentManager.AddAocData(pfs, fn.FullName, mainNca.Header.TitleId);
}
}
LoadNca(mainNca, patchNca, controlNca);
}
@ -179,6 +193,21 @@ namespace Ryujinx.HLE.HOS
if (mainNca != null)
{
_contentManager.ClearAocData();
_contentManager.AddAocData(nsp, nspFile, mainNca.Header.TitleId);
// Check all nsp's in the base directory for AOC
foreach (var fn in new FileInfo(nspFile).Directory.EnumerateFiles("*.nsp"))
{
if (fn.FullName == nspFile) continue;
using (FileStream fs = fn.OpenRead())
using (IStorage storage = fs.AsStorage())
using (PartitionFileSystem pfs = new PartitionFileSystem(storage))
{
_contentManager.AddAocData(pfs, fn.FullName, mainNca.Header.TitleId);
}
}
LoadNca(mainNca, patchNca, controlNca);
return;