2020-11-19 23:56:23 +01:00
|
|
|
|
using Ryujinx.Common;
|
|
|
|
|
using Ryujinx.Common.Logging;
|
|
|
|
|
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
2022-03-12 18:38:49 +01:00
|
|
|
|
using System.Collections.Generic;
|
2020-11-19 23:56:23 +01:00
|
|
|
|
|
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Olsc
|
|
|
|
|
{
|
|
|
|
|
[Service("olsc:u")] // 10.0.0+
|
|
|
|
|
class IOlscServiceForApplication : IpcService
|
|
|
|
|
{
|
2022-03-12 18:38:49 +01:00
|
|
|
|
private bool _initialized;
|
|
|
|
|
private Dictionary<UserId, bool> _saveDataBackupSettingDatabase;
|
2020-11-19 23:56:23 +01:00
|
|
|
|
|
|
|
|
|
public IOlscServiceForApplication(ServiceCtx context) { }
|
|
|
|
|
|
2023-04-15 01:00:34 +02:00
|
|
|
|
[CommandCmif(0)]
|
2020-11-19 23:56:23 +01:00
|
|
|
|
// Initialize(pid)
|
|
|
|
|
public ResultCode Initialize(ServiceCtx context)
|
|
|
|
|
{
|
|
|
|
|
// NOTE: Service call arp:r GetApplicationInstanceUnregistrationNotifier with the pid and initialize some internal struct.
|
2022-03-12 18:38:49 +01:00
|
|
|
|
// Since we will not support online savedata backup, it's fine to stub it for now.
|
|
|
|
|
|
|
|
|
|
_saveDataBackupSettingDatabase = new Dictionary<UserId, bool>();
|
2020-11-19 23:56:23 +01:00
|
|
|
|
|
|
|
|
|
_initialized = true;
|
|
|
|
|
|
|
|
|
|
Logger.Stub?.PrintStub(LogClass.ServiceOlsc);
|
|
|
|
|
|
|
|
|
|
return ResultCode.Success;
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-15 01:00:34 +02:00
|
|
|
|
[CommandCmif(13)]
|
2022-03-12 18:38:49 +01:00
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-20 17:25:29 +01:00
|
|
|
|
if (_saveDataBackupSettingDatabase.TryGetValue(userId, out bool enabled) && enabled)
|
2022-03-12 18:38:49 +01:00
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-15 01:00:34 +02:00
|
|
|
|
[CommandCmif(14)]
|
2020-11-19 23:56:23 +01:00
|
|
|
|
// SetSaveDataBackupSettingEnabled(nn::account::Uid, bool)
|
|
|
|
|
public ResultCode SetSaveDataBackupSettingEnabled(ServiceCtx context)
|
|
|
|
|
{
|
2022-03-12 18:38:49 +01:00
|
|
|
|
bool saveDataBackupSettingEnabled = context.RequestData.ReadUInt64() != 0;
|
2020-11-19 23:56:23 +01:00
|
|
|
|
UserId userId = context.RequestData.ReadStruct<UserId>();
|
|
|
|
|
|
|
|
|
|
if (!_initialized)
|
|
|
|
|
{
|
|
|
|
|
return ResultCode.NotInitialized;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (userId.IsNull)
|
|
|
|
|
{
|
|
|
|
|
return ResultCode.NullArgument;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-12 18:38:49 +01:00
|
|
|
|
_saveDataBackupSettingDatabase[userId] = saveDataBackupSettingEnabled;
|
|
|
|
|
|
|
|
|
|
// NOTE: Since we will not support online savedata backup, it's fine to stub it for now.
|
2020-11-19 23:56:23 +01:00
|
|
|
|
|
|
|
|
|
Logger.Stub?.PrintStub(LogClass.ServiceOlsc, new { userId, saveDataBackupSettingEnabled });
|
|
|
|
|
|
|
|
|
|
return ResultCode.Success;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|