mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-26 00:32:48 +01:00
service: acc: Implement functions needed for profile select (#11653)
This commit is contained in:
parent
8becf13e8b
commit
bcce184e60
6 changed files with 91 additions and 8 deletions
|
@ -49,7 +49,7 @@ public:
|
||||||
: ServiceFramework{system_, "IManagerForSystemService"} {
|
: ServiceFramework{system_, "IManagerForSystemService"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "CheckAvailability"},
|
{0, &IManagerForSystemService::CheckAvailability, "CheckAvailability"},
|
||||||
{1, nullptr, "GetAccountId"},
|
{1, nullptr, "GetAccountId"},
|
||||||
{2, nullptr, "EnsureIdTokenCacheAsync"},
|
{2, nullptr, "EnsureIdTokenCacheAsync"},
|
||||||
{3, nullptr, "LoadIdTokenCache"},
|
{3, nullptr, "LoadIdTokenCache"},
|
||||||
|
@ -78,6 +78,13 @@ public:
|
||||||
|
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CheckAvailability(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 3.0.0+
|
// 3.0.0+
|
||||||
|
@ -837,6 +844,29 @@ void Module::Interface::InitializeApplicationInfoV2(HLERequestContext& ctx) {
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Module::Interface::BeginUserRegistration(HLERequestContext& ctx) {
|
||||||
|
const auto user_id = Common::UUID::MakeRandom();
|
||||||
|
profile_manager->CreateNewUser(user_id, "yuzu");
|
||||||
|
|
||||||
|
LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString());
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 6};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushRaw(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::CompleteUserRegistration(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
Common::UUID user_id = rp.PopRaw<Common::UUID>();
|
||||||
|
|
||||||
|
LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString());
|
||||||
|
|
||||||
|
profile_manager->WriteUserSaveFile();
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void Module::Interface::GetProfileEditor(HLERequestContext& ctx) {
|
void Module::Interface::GetProfileEditor(HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
Common::UUID user_id = rp.PopRaw<Common::UUID>();
|
Common::UUID user_id = rp.PopRaw<Common::UUID>();
|
||||||
|
@ -880,6 +910,17 @@ void Module::Interface::StoreSaveDataThumbnailApplication(HLERequestContext& ctx
|
||||||
StoreSaveDataThumbnail(ctx, uuid, tid);
|
StoreSaveDataThumbnail(ctx, uuid, tid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Module::Interface::GetBaasAccountManagerForSystemService(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto uuid = rp.PopRaw<Common::UUID>();
|
||||||
|
|
||||||
|
LOG_INFO(Service_ACC, "called, uuid=0x{}", uuid.RawString());
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushIpcInterface<IManagerForSystemService>(system, uuid);
|
||||||
|
}
|
||||||
|
|
||||||
void Module::Interface::StoreSaveDataThumbnailSystem(HLERequestContext& ctx) {
|
void Module::Interface::StoreSaveDataThumbnailSystem(HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto uuid = rp.PopRaw<Common::UUID>();
|
const auto uuid = rp.PopRaw<Common::UUID>();
|
||||||
|
|
|
@ -33,10 +33,13 @@ public:
|
||||||
void TrySelectUserWithoutInteraction(HLERequestContext& ctx);
|
void TrySelectUserWithoutInteraction(HLERequestContext& ctx);
|
||||||
void IsUserAccountSwitchLocked(HLERequestContext& ctx);
|
void IsUserAccountSwitchLocked(HLERequestContext& ctx);
|
||||||
void InitializeApplicationInfoV2(HLERequestContext& ctx);
|
void InitializeApplicationInfoV2(HLERequestContext& ctx);
|
||||||
|
void BeginUserRegistration(HLERequestContext& ctx);
|
||||||
|
void CompleteUserRegistration(HLERequestContext& ctx);
|
||||||
void GetProfileEditor(HLERequestContext& ctx);
|
void GetProfileEditor(HLERequestContext& ctx);
|
||||||
void ListQualifiedUsers(HLERequestContext& ctx);
|
void ListQualifiedUsers(HLERequestContext& ctx);
|
||||||
void ListOpenContextStoredUsers(HLERequestContext& ctx);
|
void ListOpenContextStoredUsers(HLERequestContext& ctx);
|
||||||
void StoreSaveDataThumbnailApplication(HLERequestContext& ctx);
|
void StoreSaveDataThumbnailApplication(HLERequestContext& ctx);
|
||||||
|
void GetBaasAccountManagerForSystemService(HLERequestContext& ctx);
|
||||||
void StoreSaveDataThumbnailSystem(HLERequestContext& ctx);
|
void StoreSaveDataThumbnailSystem(HLERequestContext& ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -23,7 +23,7 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
||||||
{99, nullptr, "DebugActivateOpenContextRetention"},
|
{99, nullptr, "DebugActivateOpenContextRetention"},
|
||||||
{100, nullptr, "GetUserRegistrationNotifier"},
|
{100, nullptr, "GetUserRegistrationNotifier"},
|
||||||
{101, nullptr, "GetUserStateChangeNotifier"},
|
{101, nullptr, "GetUserStateChangeNotifier"},
|
||||||
{102, nullptr, "GetBaasAccountManagerForSystemService"},
|
{102, &ACC_SU::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"},
|
||||||
{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"},
|
{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"},
|
||||||
{104, nullptr, "GetProfileUpdateNotifier"},
|
{104, nullptr, "GetProfileUpdateNotifier"},
|
||||||
{105, nullptr, "CheckNetworkServiceAvailabilityAsync"},
|
{105, nullptr, "CheckNetworkServiceAvailabilityAsync"},
|
||||||
|
@ -40,8 +40,8 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
||||||
{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"},
|
{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"},
|
||||||
{190, nullptr, "GetUserLastOpenedApplication"},
|
{190, nullptr, "GetUserLastOpenedApplication"},
|
||||||
{191, nullptr, "ActivateOpenContextHolder"},
|
{191, nullptr, "ActivateOpenContextHolder"},
|
||||||
{200, nullptr, "BeginUserRegistration"},
|
{200, &ACC_SU::BeginUserRegistration, "BeginUserRegistration"},
|
||||||
{201, nullptr, "CompleteUserRegistration"},
|
{201, &ACC_SU::CompleteUserRegistration, "CompleteUserRegistration"},
|
||||||
{202, nullptr, "CancelUserRegistration"},
|
{202, nullptr, "CancelUserRegistration"},
|
||||||
{203, nullptr, "DeleteUser"},
|
{203, nullptr, "DeleteUser"},
|
||||||
{204, nullptr, "SetUserPosition"},
|
{204, nullptr, "SetUserPosition"},
|
||||||
|
|
|
@ -96,9 +96,10 @@ public:
|
||||||
bool SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,
|
bool SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,
|
||||||
const UserData& data_new);
|
const UserData& data_new);
|
||||||
|
|
||||||
|
void WriteUserSaveFile();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ParseUserSaveFile();
|
void ParseUserSaveFile();
|
||||||
void WriteUserSaveFile();
|
|
||||||
std::optional<std::size_t> AddToProfiles(const ProfileInfo& profile);
|
std::optional<std::size_t> AddToProfiles(const ProfileInfo& profile);
|
||||||
bool RemoveProfileAtIndex(std::size_t index);
|
bool RemoveProfileAtIndex(std::size_t index);
|
||||||
|
|
||||||
|
|
|
@ -210,8 +210,8 @@ IDisplayController::IDisplayController(Core::System& system_)
|
||||||
{21, nullptr, "ClearAppletTransitionBuffer"},
|
{21, nullptr, "ClearAppletTransitionBuffer"},
|
||||||
{22, nullptr, "AcquireLastApplicationCaptureSharedBuffer"},
|
{22, nullptr, "AcquireLastApplicationCaptureSharedBuffer"},
|
||||||
{23, nullptr, "ReleaseLastApplicationCaptureSharedBuffer"},
|
{23, nullptr, "ReleaseLastApplicationCaptureSharedBuffer"},
|
||||||
{24, nullptr, "AcquireLastForegroundCaptureSharedBuffer"},
|
{24, &IDisplayController::AcquireLastForegroundCaptureSharedBuffer, "AcquireLastForegroundCaptureSharedBuffer"},
|
||||||
{25, nullptr, "ReleaseLastForegroundCaptureSharedBuffer"},
|
{25, &IDisplayController::ReleaseLastForegroundCaptureSharedBuffer, "ReleaseLastForegroundCaptureSharedBuffer"},
|
||||||
{26, &IDisplayController::AcquireCallerAppletCaptureSharedBuffer, "AcquireCallerAppletCaptureSharedBuffer"},
|
{26, &IDisplayController::AcquireCallerAppletCaptureSharedBuffer, "AcquireCallerAppletCaptureSharedBuffer"},
|
||||||
{27, &IDisplayController::ReleaseCallerAppletCaptureSharedBuffer, "ReleaseCallerAppletCaptureSharedBuffer"},
|
{27, &IDisplayController::ReleaseCallerAppletCaptureSharedBuffer, "ReleaseCallerAppletCaptureSharedBuffer"},
|
||||||
{28, nullptr, "TakeScreenShotOfOwnLayerEx"},
|
{28, nullptr, "TakeScreenShotOfOwnLayerEx"},
|
||||||
|
@ -239,6 +239,22 @@ void IDisplayController::TakeScreenShotOfOwnLayer(HLERequestContext& ctx) {
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IDisplayController::AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push(1U);
|
||||||
|
rb.Push(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDisplayController::ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void IDisplayController::AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) {
|
void IDisplayController::AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_AM, "(STUBBED) called");
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
|
||||||
|
@ -1557,7 +1573,7 @@ ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_)
|
||||||
{100, nullptr, "CreateGameMovieTrimmer"},
|
{100, nullptr, "CreateGameMovieTrimmer"},
|
||||||
{101, nullptr, "ReserveResourceForMovieOperation"},
|
{101, nullptr, "ReserveResourceForMovieOperation"},
|
||||||
{102, nullptr, "UnreserveResourceForMovieOperation"},
|
{102, nullptr, "UnreserveResourceForMovieOperation"},
|
||||||
{110, nullptr, "GetMainAppletAvailableUsers"},
|
{110, &ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers, "GetMainAppletAvailableUsers"},
|
||||||
{120, nullptr, "GetLaunchStorageInfoForDebug"},
|
{120, nullptr, "GetLaunchStorageInfoForDebug"},
|
||||||
{130, nullptr, "GetGpuErrorDetectedSystemEvent"},
|
{130, nullptr, "GetGpuErrorDetectedSystemEvent"},
|
||||||
{140, nullptr, "SetApplicationMemoryReservation"},
|
{140, nullptr, "SetApplicationMemoryReservation"},
|
||||||
|
@ -1652,6 +1668,25 @@ void ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo(HLERequestContext&
|
||||||
rb.PushRaw(applet_info);
|
rb.PushRaw(applet_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext& ctx) {
|
||||||
|
const Service::Account::ProfileManager manager{};
|
||||||
|
bool is_empty{true};
|
||||||
|
s32 user_count{-1};
|
||||||
|
|
||||||
|
LOG_INFO(Service_AM, "called");
|
||||||
|
|
||||||
|
if (manager.GetUserCount() > 0) {
|
||||||
|
is_empty = false;
|
||||||
|
user_count = static_cast<s32>(manager.GetUserCount());
|
||||||
|
ctx.WriteBuffer(manager.GetAllUsers());
|
||||||
|
}
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push<u8>(is_empty);
|
||||||
|
rb.Push(user_count);
|
||||||
|
}
|
||||||
|
|
||||||
void ILibraryAppletSelfAccessor::PushInShowAlbum() {
|
void ILibraryAppletSelfAccessor::PushInShowAlbum() {
|
||||||
const Applets::CommonArguments arguments{
|
const Applets::CommonArguments arguments{
|
||||||
.arguments_version = Applets::CommonArgumentVersion::Version3,
|
.arguments_version = Applets::CommonArgumentVersion::Version3,
|
||||||
|
|
|
@ -124,6 +124,8 @@ public:
|
||||||
private:
|
private:
|
||||||
void GetCallerAppletCaptureImageEx(HLERequestContext& ctx);
|
void GetCallerAppletCaptureImageEx(HLERequestContext& ctx);
|
||||||
void TakeScreenShotOfOwnLayer(HLERequestContext& ctx);
|
void TakeScreenShotOfOwnLayer(HLERequestContext& ctx);
|
||||||
|
void AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx);
|
||||||
|
void ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx);
|
||||||
void AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx);
|
void AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx);
|
||||||
void ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx);
|
void ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx);
|
||||||
};
|
};
|
||||||
|
@ -345,6 +347,7 @@ private:
|
||||||
void GetLibraryAppletInfo(HLERequestContext& ctx);
|
void GetLibraryAppletInfo(HLERequestContext& ctx);
|
||||||
void ExitProcessAndReturn(HLERequestContext& ctx);
|
void ExitProcessAndReturn(HLERequestContext& ctx);
|
||||||
void GetCallerAppletIdentityInfo(HLERequestContext& ctx);
|
void GetCallerAppletIdentityInfo(HLERequestContext& ctx);
|
||||||
|
void GetMainAppletAvailableUsers(HLERequestContext& ctx);
|
||||||
|
|
||||||
void PushInShowAlbum();
|
void PushInShowAlbum();
|
||||||
void PushInShowCabinetData();
|
void PushInShowCabinetData();
|
||||||
|
|
Loading…
Reference in a new issue