diff options
| author | Ac_K <Acoustik666@gmail.com> | 2023-03-31 21:16:46 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-31 21:16:46 +0200 |
| commit | 4c2d9ff3ff9d7afb1fd0bd764bee5931fa5f053c (patch) | |
| tree | 1245f5ec356551bd20a9594d114d06a53c41d036 /Ryujinx.Headless.SDL2 | |
| parent | 8198b99935f562ffb2fb9a75175a8df24d235152 (diff) | |
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>
Diffstat (limited to 'Ryujinx.Headless.SDL2')
| -rw-r--r-- | Ryujinx.Headless.SDL2/Program.cs | 57 | ||||
| -rw-r--r-- | Ryujinx.Headless.SDL2/WindowBase.cs | 18 |
2 files changed, 55 insertions, 20 deletions
diff --git a/Ryujinx.Headless.SDL2/Program.cs b/Ryujinx.Headless.SDL2/Program.cs index f618e38d..54ab18cd 100644 --- a/Ryujinx.Headless.SDL2/Program.cs +++ b/Ryujinx.Headless.SDL2/Program.cs @@ -447,10 +447,10 @@ namespace Ryujinx.Headless.SDL2 private static void SetupProgressHandler() { - if (_emulationContext.Application.DiskCacheLoadState != null) + if (_emulationContext.Processes.ActiveApplication.DiskCacheLoadState != null) { - _emulationContext.Application.DiskCacheLoadState.StateChanged -= ProgressHandler; - _emulationContext.Application.DiskCacheLoadState.StateChanged += ProgressHandler; + _emulationContext.Processes.ActiveApplication.DiskCacheLoadState.StateChanged -= ProgressHandler; + _emulationContext.Processes.ActiveApplication.DiskCacheLoadState.StateChanged += ProgressHandler; } _emulationContext.Gpu.ShaderCacheStateChanged -= ProgressHandler; @@ -608,12 +608,24 @@ namespace Ryujinx.Headless.SDL2 if (romFsFiles.Length > 0) { Logger.Info?.Print(LogClass.Application, "Loading as cart with RomFS."); - _emulationContext.LoadCart(path, romFsFiles[0]); + + if (!_emulationContext.LoadCart(path, romFsFiles[0])) + { + _emulationContext.Dispose(); + + return false; + } } else { Logger.Info?.Print(LogClass.Application, "Loading as cart WITHOUT RomFS."); - _emulationContext.LoadCart(path); + + if (!_emulationContext.LoadCart(path)) + { + _emulationContext.Dispose(); + + return false; + } } } else if (File.Exists(path)) @@ -622,27 +634,52 @@ namespace Ryujinx.Headless.SDL2 { case ".xci": Logger.Info?.Print(LogClass.Application, "Loading as XCI."); - _emulationContext.LoadXci(path); + + if (!_emulationContext.LoadXci(path)) + { + _emulationContext.Dispose(); + + return false; + } break; case ".nca": Logger.Info?.Print(LogClass.Application, "Loading as NCA."); - _emulationContext.LoadNca(path); + + if (!_emulationContext.LoadNca(path)) + { + _emulationContext.Dispose(); + + return false; + } break; case ".nsp": case ".pfs0": Logger.Info?.Print(LogClass.Application, "Loading as NSP."); - _emulationContext.LoadNsp(path); + + if (!_emulationContext.LoadNsp(path)) + { + _emulationContext.Dispose(); + + return false; + } break; default: Logger.Info?.Print(LogClass.Application, "Loading as Homebrew."); try { - _emulationContext.LoadProgram(path); + if (!_emulationContext.LoadProgram(path)) + { + _emulationContext.Dispose(); + + return false; + } } catch (ArgumentOutOfRangeException) { Logger.Error?.Print(LogClass.Application, "The specified file is not supported by Ryujinx."); + _emulationContext.Dispose(); + return false; } break; @@ -664,4 +701,4 @@ namespace Ryujinx.Headless.SDL2 return true; } } -}
\ No newline at end of file +} diff --git a/Ryujinx.Headless.SDL2/WindowBase.cs b/Ryujinx.Headless.SDL2/WindowBase.cs index db6c8ec4..e3371042 100644 --- a/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/Ryujinx.Headless.SDL2/WindowBase.cs @@ -145,16 +145,14 @@ namespace Ryujinx.Headless.SDL2 private void InitializeWindow() { - string titleNameSection = string.IsNullOrWhiteSpace(Device.Application.TitleName) ? string.Empty - : $" - {Device.Application.TitleName}"; - - string titleVersionSection = string.IsNullOrWhiteSpace(Device.Application.DisplayVersion) ? string.Empty - : $" v{Device.Application.DisplayVersion}"; - - string titleIdSection = string.IsNullOrWhiteSpace(Device.Application.TitleIdText) ? string.Empty - : $" ({Device.Application.TitleIdText.ToUpper()})"; - - string titleArchSection = Device.Application.TitleIs64Bit ? " (64-bit)" : " (32-bit)"; + var activeProcess = Device.Processes.ActiveApplication; + var nacp = activeProcess.ApplicationControlProperties; + int desiredLanguage = (int)Device.System.State.DesiredTitleLanguage; + + string titleNameSection = string.IsNullOrWhiteSpace(nacp.Title[desiredLanguage].NameString.ToString()) ? string.Empty : $" - {nacp.Title[desiredLanguage].NameString.ToString()}"; + string titleVersionSection = string.IsNullOrWhiteSpace(nacp.DisplayVersionString.ToString()) ? string.Empty : $" v{nacp.DisplayVersionString.ToString()}"; + string titleIdSection = string.IsNullOrWhiteSpace(activeProcess.ProgramIdText) ? string.Empty : $" ({activeProcess.ProgramIdText.ToUpper()})"; + string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)"; WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DefaultWidth, DefaultHeight, DefaultFlags | GetWindowFlags()); |
