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>
This commit is contained in:
parent
8198b99935
commit
4c2d9ff3ff
41 changed files with 1567 additions and 1322 deletions
|
@ -48,7 +48,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
|
||||
// NOTE: Service call arp:r GetApplicationLaunchProperty to get TitleId using the PId.
|
||||
|
||||
return CountAddOnContentImpl(context, context.Device.Application.TitleId);
|
||||
return CountAddOnContentImpl(context, context.Device.Processes.ActiveApplication.ProgramId);
|
||||
}
|
||||
|
||||
[CommandHipc(3)]
|
||||
|
@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
|
||||
// NOTE: Service call arp:r GetApplicationLaunchProperty to get TitleId using the PId.
|
||||
|
||||
return ListAddContentImpl(context, context.Device.Application.TitleId);
|
||||
return ListAddContentImpl(context, context.Device.Processes.ActiveApplication.ProgramId);
|
||||
}
|
||||
|
||||
[CommandHipc(4)] // 1.0.0-6.2.0
|
||||
|
@ -79,7 +79,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
|
||||
// NOTE: Service call arp:r GetApplicationLaunchProperty to get TitleId using the PId.
|
||||
|
||||
return GetAddOnContentBaseIdImpl(context, context.Device.Application.TitleId);
|
||||
return GetAddOnContentBaseIdImpl(context, context.Device.Processes.ActiveApplication.ProgramId);
|
||||
}
|
||||
|
||||
[CommandHipc(6)] // 1.0.0-6.2.0
|
||||
|
@ -99,7 +99,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
|
||||
// NOTE: Service call arp:r GetApplicationLaunchProperty to get TitleId using the PId.
|
||||
|
||||
return PrepareAddOnContentImpl(context, context.Device.Application.TitleId);
|
||||
return PrepareAddOnContentImpl(context, context.Device.Processes.ActiveApplication.ProgramId);
|
||||
}
|
||||
|
||||
[CommandHipc(8)] // 4.0.0+
|
||||
|
@ -128,7 +128,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
// NOTE: Service call arp:r GetApplicationLaunchProperty to get TitleId using the PId.
|
||||
|
||||
// TODO: Found where stored value is used.
|
||||
ResultCode resultCode = GetAddOnContentBaseIdFromTitleId(context, context.Device.Application.TitleId);
|
||||
ResultCode resultCode = GetAddOnContentBaseIdFromTitleId(context, context.Device.Processes.ActiveApplication.ProgramId);
|
||||
|
||||
if (resultCode != ResultCode.Success)
|
||||
{
|
||||
|
@ -294,7 +294,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
// NOTE: Service calls arp:r GetApplicationControlProperty to get AddOnContentBaseId using TitleId,
|
||||
// If the call fails, it returns ResultCode.InvalidPid.
|
||||
|
||||
_addOnContentBaseId = context.Device.Application.ControlData.Value.AddOnContentBaseId;
|
||||
_addOnContentBaseId = context.Device.Processes.ActiveApplication.ApplicationControlProperties.AddOnContentBaseId;
|
||||
|
||||
if (_addOnContentBaseId == 0)
|
||||
{
|
||||
|
@ -308,7 +308,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc
|
|||
{
|
||||
uint index = context.RequestData.ReadUInt32();
|
||||
|
||||
ResultCode resultCode = GetAddOnContentBaseIdFromTitleId(context, context.Device.Application.TitleId);
|
||||
ResultCode resultCode = GetAddOnContentBaseIdFromTitleId(context, context.Device.Processes.ActiveApplication.ProgramId);
|
||||
|
||||
if (resultCode != ResultCode.Success)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Ns
|
||||
using LibHac.Ns;
|
||||
using Ryujinx.Common.Utilities;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Ns
|
||||
{
|
||||
[Service("ns:am")]
|
||||
class IApplicationManagerInterface : IpcService
|
||||
|
@ -14,9 +18,9 @@
|
|||
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
|
||||
byte[] nacpData = context.Device.Application.ControlData.ByteSpan.ToArray();
|
||||
ApplicationControlProperty nacp = context.Device.Processes.ActiveApplication.ApplicationControlProperties;
|
||||
|
||||
context.Memory.Write(position, nacpData);
|
||||
context.Memory.Write(position, SpanHelpers.AsByteSpan(ref nacp).ToArray());
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Ns
|
||||
using LibHac.Common;
|
||||
using LibHac.Ns;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Ns
|
||||
{
|
||||
class IReadOnlyApplicationControlDataInterface : IpcService
|
||||
{
|
||||
|
@ -13,9 +16,9 @@
|
|||
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
|
||||
byte[] nacpData = context.Device.Application.ControlData.ByteSpan.ToArray();
|
||||
ApplicationControlProperty nacp = context.Device.Processes.ActiveApplication.ApplicationControlProperties;
|
||||
|
||||
context.Memory.Write(position, nacpData);
|
||||
context.Memory.Write(position, SpanHelpers.AsByteSpan(ref nacp).ToArray());
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue