Fix ListOpenContextStoredUsers and stub LoadOpenContext (#3718)
* Fix ListOpenContextStoredUsers and stub LoadOpenContext * Remove nonsensical comment
This commit is contained in:
parent
814f75142e
commit
1fd5cf2b4a
4 changed files with 32 additions and 15 deletions
|
@ -22,7 +22,8 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
// outside of the AccountManager.
|
// outside of the AccountManager.
|
||||||
private readonly HorizonClient _horizonClient;
|
private readonly HorizonClient _horizonClient;
|
||||||
|
|
||||||
private ConcurrentDictionary<string, UserProfile> _profiles;
|
private readonly ConcurrentDictionary<string, UserProfile> _profiles;
|
||||||
|
private UserProfile[] _storedOpenedUsers;
|
||||||
|
|
||||||
public UserProfile LastOpenedUser { get; private set; }
|
public UserProfile LastOpenedUser { get; private set; }
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
_horizonClient = horizonClient;
|
_horizonClient = horizonClient;
|
||||||
|
|
||||||
_profiles = new ConcurrentDictionary<string, UserProfile>();
|
_profiles = new ConcurrentDictionary<string, UserProfile>();
|
||||||
|
_storedOpenedUsers = Array.Empty<UserProfile>();
|
||||||
|
|
||||||
_accountSaveDataManager = new AccountSaveDataManager(_profiles);
|
_accountSaveDataManager = new AccountSaveDataManager(_profiles);
|
||||||
|
|
||||||
|
@ -44,9 +46,9 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UserId commandLineUserProfileOverride = default;
|
UserId commandLineUserProfileOverride = default;
|
||||||
if (!string.IsNullOrEmpty(initialProfileName))
|
if (!string.IsNullOrEmpty(initialProfileName))
|
||||||
{
|
{
|
||||||
commandLineUserProfileOverride = _profiles.Values.FirstOrDefault(x => x.Name == initialProfileName)?.UserId ?? default;
|
commandLineUserProfileOverride = _profiles.Values.FirstOrDefault(x => x.Name == initialProfileName)?.UserId ?? default;
|
||||||
if (commandLineUserProfileOverride.IsNull)
|
if (commandLineUserProfileOverride.IsNull)
|
||||||
Logger.Warning?.Print(LogClass.Application, $"The command line specified profile named '{initialProfileName}' was not found");
|
Logger.Warning?.Print(LogClass.Application, $"The command line specified profile named '{initialProfileName}' was not found");
|
||||||
|
@ -221,6 +223,16 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
return _profiles.Values.Where(x => x.AccountState == AccountState.Open);
|
return _profiles.Values.Where(x => x.AccountState == AccountState.Open);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal IEnumerable<UserProfile> GetStoredOpenedUsers()
|
||||||
|
{
|
||||||
|
return _storedOpenedUsers;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void StoreOpenedUsers()
|
||||||
|
{
|
||||||
|
_storedOpenedUsers = _profiles.Values.Where(x => x.AccountState == AccountState.Open).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
internal UserProfile GetFirst()
|
internal UserProfile GetFirst()
|
||||||
{
|
{
|
||||||
return _profiles.First().Value;
|
return _profiles.First().Value;
|
||||||
|
|
|
@ -162,7 +162,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
||||||
|
|
||||||
public ResultCode StoreOpenContext(ServiceCtx context)
|
public ResultCode StoreOpenContext(ServiceCtx context)
|
||||||
{
|
{
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAcc);
|
context.Device.System.AccountManager.StoreOpenedUsers();
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,6 +201,11 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
|
||||||
|
{
|
||||||
|
return WriteUserList(context, context.Device.System.AccountManager.GetStoredOpenedUsers());
|
||||||
|
}
|
||||||
|
|
||||||
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
// TODO: Determine how users are "qualified". We assume all users are "qualified" for now.
|
// TODO: Determine how users are "qualified". We assume all users are "qualified" for now.
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Cpu;
|
|
||||||
using Ryujinx.HLE.HOS.Services.Account.Acc.AccountService;
|
using Ryujinx.HLE.HOS.Services.Account.Acc.AccountService;
|
||||||
using Ryujinx.HLE.HOS.Services.Arp;
|
using Ryujinx.HLE.HOS.Services.Arp;
|
||||||
|
|
||||||
|
@ -139,20 +138,21 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||||
return _applicationServiceServer.ClearSaveDataThumbnail(context);
|
return _applicationServiceServer.ClearSaveDataThumbnail(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[CommandHipc(130)] // 5.0.0+
|
||||||
|
// LoadOpenContext(nn::account::Uid)
|
||||||
|
public ResultCode LoadOpenContext(ServiceCtx context)
|
||||||
|
{
|
||||||
|
Logger.Stub?.PrintStub(LogClass.ServiceAcc);
|
||||||
|
|
||||||
|
return ResultCode.Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
[CommandHipc(60)] // 5.0.0-5.1.0
|
||||||
[CommandHipc(131)] // 6.0.0+
|
[CommandHipc(131)] // 6.0.0+
|
||||||
// ListOpenContextStoredUsers() -> array<nn::account::Uid, 0xa>
|
// ListOpenContextStoredUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
|
public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
ulong outputPosition = context.Request.RecvListBuff[0].Position;
|
return _applicationServiceServer.ListOpenContextStoredUsers(context);
|
||||||
ulong outputSize = context.Request.RecvListBuff[0].Size;
|
|
||||||
|
|
||||||
MemoryHelper.FillWithZeros(context.Memory, outputPosition, (int)outputSize);
|
|
||||||
|
|
||||||
// TODO: This seems to write stored userids of the OpenContext in the buffer. We needs to determine them.
|
|
||||||
|
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAcc);
|
|
||||||
|
|
||||||
return ResultCode.Success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(141)] // 6.0.0+
|
[CommandHipc(141)] // 6.0.0+
|
||||||
|
|
Reference in a new issue