From 4c2d9ff3ff9d7afb1fd0bd764bee5931fa5f053c Mon Sep 17 00:00:00 2001
From: Ac_K <Acoustik666@gmail.com>
Date: Fri, 31 Mar 2023 21:16:46 +0200
Subject: HLE: Refactoring of ApplicationLoader (#4480)

* HLE: Refactoring of ApplicationLoader

* Fix SDL2 Headless

* Addresses gdkchan feedback

* Fixes LoadUnpackedNca RomFS loading

* remove useless casting

* Cleanup and fixe empty application name

* Remove ProcessInfo

* Fixes typo

* ActiveProcess to ActiveApplication

* Update check

* Clean using.

* Use the correct filepath when loading Homebrew.npdm

* Fix NRE in ProcessResult if MetaLoader is null

* Add more checks for valid processId & return success

* Add missing logging statement for npdm error

* Return result for LoadKip()

* Move error logging out of PFS load extension method

This avoids logging "Could not find Main NCA"
followed by "Loading main..." when trying to start hbl.

* Fix GUIs not checking load results

* Fix style and formatting issues

* Fix formatting and wording

* gtk: Refactor LoadApplication()

---------

Co-authored-by: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
---
 .../Extensions/LocalFileSystemExtensions.cs        | 39 ++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs

(limited to 'Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs')

diff --git a/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs b/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs
new file mode 100644
index 00000000..28d90785
--- /dev/null
+++ b/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs
@@ -0,0 +1,39 @@
+using LibHac.Common;
+using LibHac.FsSystem;
+using LibHac.Loader;
+using LibHac.Ns;
+using Ryujinx.HLE.Loaders.Processes.Extensions;
+using ApplicationId = LibHac.Ncm.ApplicationId;
+
+namespace Ryujinx.HLE.Loaders.Processes
+{
+    static class LocalFileSystemExtensions
+    {
+        public static ProcessResult Load(this LocalFileSystem exeFs, Switch device, string romFsPath = "")
+        {
+            MetaLoader metaLoader = exeFs.GetNpdm();
+            var        nacpData   = new BlitStruct<ApplicationControlProperty>(1);
+            ulong      programId  = metaLoader.GetProgramId();
+
+            device.Configuration.VirtualFileSystem.ModLoader.CollectMods(
+                new[] { programId },
+                device.Configuration.VirtualFileSystem.ModLoader.GetModsBasePath(),
+                device.Configuration.VirtualFileSystem.ModLoader.GetSdModsBasePath());
+
+            if (programId != 0)
+            {
+                ProcessLoaderHelper.EnsureSaveData(device, new ApplicationId(programId), nacpData);
+            }
+
+            ProcessResult processResult = exeFs.Load(device, nacpData, metaLoader);
+
+            // Load RomFS.
+            if (!string.IsNullOrEmpty(romFsPath))
+            {
+                device.Configuration.VirtualFileSystem.LoadRomFs(processResult.ProcessId, romFsPath);
+            }
+
+            return processResult;
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2