aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2022-03-12 18:38:49 +0100
committerGitHub <noreply@github.com>2022-03-12 18:38:49 +0100
commitaac7bbd378418791823e338d8bc174856aabfae6 (patch)
tree591cb0c4ebc345b42744a1c7b0931a4c766377d3
parentbed516bfda2b558c894e80a0d71f457c6e94a62f (diff)
olsc: Implement GetSaveDataBackupSetting (#3190)1.1.69
* olsc: Implement GetSaveDataBackupSetting This PR implement GetSaveDataBackupSetting of OLSC service which is now needed by ACNH 2.0.5. The game is playable as usual if you use the same user profile as the original save file (I don't know if it was the case before), everything is checked by RE. * addresses gdkchan feedback
-rw-r--r--Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs47
1 files changed, 42 insertions, 5 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs b/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs
index 39e82b8c..c70134c5 100644
--- a/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs
+++ b/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs
@@ -1,13 +1,15 @@
using Ryujinx.Common;
using Ryujinx.Common.Logging;
using Ryujinx.HLE.HOS.Services.Account.Acc;
+using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Services.Olsc
{
[Service("olsc:u")] // 10.0.0+
class IOlscServiceForApplication : IpcService
{
- private bool _initialized;
+ private bool _initialized;
+ private Dictionary<UserId, bool> _saveDataBackupSettingDatabase;
public IOlscServiceForApplication(ServiceCtx context) { }
@@ -16,7 +18,9 @@ namespace Ryujinx.HLE.HOS.Services.Olsc
public ResultCode Initialize(ServiceCtx context)
{
// NOTE: Service call arp:r GetApplicationInstanceUnregistrationNotifier with the pid and initialize some internal struct.
- // Since we will not support online savedata backup. It's fine to stub it for now.
+ // Since we will not support online savedata backup, it's fine to stub it for now.
+
+ _saveDataBackupSettingDatabase = new Dictionary<UserId, bool>();
_initialized = true;
@@ -25,12 +29,44 @@ namespace Ryujinx.HLE.HOS.Services.Olsc
return ResultCode.Success;
}
+ [CommandHipc(13)]
+ // GetSaveDataBackupSetting(nn::account::Uid) -> u8
+ public ResultCode GetSaveDataBackupSetting(ServiceCtx context)
+ {
+ UserId userId = context.RequestData.ReadStruct<UserId>();
+
+ if (!_initialized)
+ {
+ return ResultCode.NotInitialized;
+ }
+
+ if (userId.IsNull)
+ {
+ return ResultCode.NullArgument;
+ }
+
+ if (_saveDataBackupSettingDatabase[userId])
+ {
+ context.ResponseData.Write((byte)1); // TODO: Determine value.
+ }
+ else
+ {
+ context.ResponseData.Write((byte)2); // TODO: Determine value.
+ }
+
+ // NOTE: Since we will not support online savedata backup, it's fine to stub it for now.
+
+ Logger.Stub?.PrintStub(LogClass.ServiceOlsc, new { userId });
+
+ return ResultCode.Success;
+ }
+
[CommandHipc(14)]
// SetSaveDataBackupSettingEnabled(nn::account::Uid, bool)
public ResultCode SetSaveDataBackupSettingEnabled(ServiceCtx context)
{
+ bool saveDataBackupSettingEnabled = context.RequestData.ReadUInt64() != 0;
UserId userId = context.RequestData.ReadStruct<UserId>();
- ulong saveDataBackupSettingEnabled = context.RequestData.ReadUInt64();
if (!_initialized)
{
@@ -42,8 +78,9 @@ namespace Ryujinx.HLE.HOS.Services.Olsc
return ResultCode.NullArgument;
}
- // NOTE: Service store the UserId and the boolean in an internal SaveDataBackupSettingDatabase object.
- // Since we will not support online savedata backup. It's fine to stub it for now.
+ _saveDataBackupSettingDatabase[userId] = saveDataBackupSettingEnabled;
+
+ // NOTE: Since we will not support online savedata backup, it's fine to stub it for now.
Logger.Stub?.PrintStub(LogClass.ServiceOlsc, new { userId, saveDataBackupSettingEnabled });