aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2022-09-27 21:24:52 -0300
committerGitHub <noreply@github.com>2022-09-27 21:24:52 -0300
commit1fd5cf2b4a6f592cc8df945e540ea523a799bb97 (patch)
tree6962acb9dc2461cbe0eebc45a7e5ce84d5c10693
parent814f75142e8e4e81741a859db8189ca60535f3e6 (diff)
Fix ListOpenContextStoredUsers and stub LoadOpenContext (#3718)1.1.280
* Fix ListOpenContextStoredUsers and stub LoadOpenContext * Remove nonsensical comment
-rw-r--r--Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs18
-rw-r--r--Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/Account/Acc/ApplicationServiceServer.cs5
-rw-r--r--Ryujinx.HLE/HOS/Services/Account/Acc/IAccountServiceForApplication.cs22
4 files changed, 32 insertions, 15 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs
index 9d9cb6ff..41d5028f 100644
--- a/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs
+++ b/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs
@@ -22,7 +22,8 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
// outside of the AccountManager.
private readonly HorizonClient _horizonClient;
- private ConcurrentDictionary<string, UserProfile> _profiles;
+ private readonly ConcurrentDictionary<string, UserProfile> _profiles;
+ private UserProfile[] _storedOpenedUsers;
public UserProfile LastOpenedUser { get; private set; }
@@ -31,6 +32,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
_horizonClient = horizonClient;
_profiles = new ConcurrentDictionary<string, UserProfile>();
+ _storedOpenedUsers = Array.Empty<UserProfile>();
_accountSaveDataManager = new AccountSaveDataManager(_profiles);
@@ -44,9 +46,9 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
}
else
{
- UserId commandLineUserProfileOverride = default;
+ UserId commandLineUserProfileOverride = default;
if (!string.IsNullOrEmpty(initialProfileName))
- {
+ {
commandLineUserProfileOverride = _profiles.Values.FirstOrDefault(x => x.Name == initialProfileName)?.UserId ?? default;
if (commandLineUserProfileOverride.IsNull)
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);
}
+ internal IEnumerable<UserProfile> GetStoredOpenedUsers()
+ {
+ return _storedOpenedUsers;
+ }
+
+ internal void StoreOpenedUsers()
+ {
+ _storedOpenedUsers = _profiles.Values.Where(x => x.AccountState == AccountState.Open).ToArray();
+ }
+
internal UserProfile GetFirst()
{
return _profiles.First().Value;
diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs
index d74f5ecf..011accd2 100644
--- a/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs
+++ b/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs
@@ -162,7 +162,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
public ResultCode StoreOpenContext(ServiceCtx context)
{
- Logger.Stub?.PrintStub(LogClass.ServiceAcc);
+ context.Device.System.AccountManager.StoreOpenedUsers();
return ResultCode.Success;
}
diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/ApplicationServiceServer.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/ApplicationServiceServer.cs
index aa687360..7b474f0e 100644
--- a/Ryujinx.HLE/HOS/Services/Account/Acc/ApplicationServiceServer.cs
+++ b/Ryujinx.HLE/HOS/Services/Account/Acc/ApplicationServiceServer.cs
@@ -201,6 +201,11 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
return ResultCode.Success;
}
+ public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
+ {
+ return WriteUserList(context, context.Device.System.AccountManager.GetStoredOpenedUsers());
+ }
+
public ResultCode ListQualifiedUsers(ServiceCtx context)
{
// TODO: Determine how users are "qualified". We assume all users are "qualified" for now.
diff --git a/Ryujinx.HLE/HOS/Services/Account/Acc/IAccountServiceForApplication.cs b/Ryujinx.HLE/HOS/Services/Account/Acc/IAccountServiceForApplication.cs
index 4de0b34b..92082322 100644
--- a/Ryujinx.HLE/HOS/Services/Account/Acc/IAccountServiceForApplication.cs
+++ b/Ryujinx.HLE/HOS/Services/Account/Acc/IAccountServiceForApplication.cs
@@ -1,5 +1,4 @@
using Ryujinx.Common.Logging;
-using Ryujinx.Cpu;
using Ryujinx.HLE.HOS.Services.Account.Acc.AccountService;
using Ryujinx.HLE.HOS.Services.Arp;
@@ -139,22 +138,23 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
return _applicationServiceServer.ClearSaveDataThumbnail(context);
}
- [CommandHipc(131)] // 6.0.0+
- // ListOpenContextStoredUsers() -> array<nn::account::Uid, 0xa>
- public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
+ [CommandHipc(130)] // 5.0.0+
+ // LoadOpenContext(nn::account::Uid)
+ public ResultCode LoadOpenContext(ServiceCtx context)
{
- ulong outputPosition = context.Request.RecvListBuff[0].Position;
- 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(60)] // 5.0.0-5.1.0
+ [CommandHipc(131)] // 6.0.0+
+ // ListOpenContextStoredUsers() -> array<nn::account::Uid, 0xa>
+ public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
+ {
+ return _applicationServiceServer.ListOpenContextStoredUsers(context);
+ }
+
[CommandHipc(141)] // 6.0.0+
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
public ResultCode ListQualifiedUsers(ServiceCtx context)