diff --git a/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.cpp b/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.cpp index 030f0dcd..07257621 100644 --- a/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.cpp +++ b/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.cpp @@ -88,7 +88,7 @@ namespace skyline::service::account { if (id == UserId{}) return result::NullArgument; - manager.RegisterService(SRVREG(IManagerForApplication), session, response); + manager.RegisterService(std::make_shared(state, manager, openedUsers), session, response); return {}; } @@ -116,7 +116,7 @@ namespace skyline::service::account { Result IAccountServiceForApplication::ListOpenContextStoredUsers(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { try { - return WriteUserList(request.outputBuf.at(0), {constant::DefaultUserId}); + return WriteUserList(request.outputBuf.at(0), openedUsers); } catch (const std::out_of_range &) { return result::InvalidInputBuffer; } diff --git a/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.h b/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.h index f6a4b051..e01e5d83 100644 --- a/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.h +++ b/app/src/main/cpp/skyline/services/account/IAccountServiceForApplication.h @@ -32,6 +32,8 @@ namespace skyline { */ class IAccountServiceForApplication : public BaseService { private: + std::vector openedUsers; + /** * @brief Writes a vector of 128-bit user IDs to an output buffer */ diff --git a/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp b/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp index 42ded241..460d0ca4 100644 --- a/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp +++ b/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp @@ -5,7 +5,9 @@ #include "IAccountServiceForApplication.h" namespace skyline::service::account { - IManagerForApplication::IManagerForApplication(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {} + IManagerForApplication::IManagerForApplication(const DeviceState &state, ServiceManager &manager, std::vector &openedUsers) : BaseService(state, manager) { + this->openedUsers = std::make_shared>(openedUsers); + } Result IManagerForApplication::CheckAvailability(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { response.Push(false); @@ -18,6 +20,8 @@ namespace skyline::service::account { } Result IManagerForApplication::StoreOpenContext(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + openedUsers->clear(); + openedUsers->push_back(constant::DefaultUserId); return {}; } } diff --git a/app/src/main/cpp/skyline/services/account/IManagerForApplication.h b/app/src/main/cpp/skyline/services/account/IManagerForApplication.h index c142469f..2e28d134 100644 --- a/app/src/main/cpp/skyline/services/account/IManagerForApplication.h +++ b/app/src/main/cpp/skyline/services/account/IManagerForApplication.h @@ -4,6 +4,7 @@ #pragma once #include +#include "IAccountServiceForApplication.h" namespace skyline::service::account { /** @@ -11,8 +12,11 @@ namespace skyline::service::account { * @url https://switchbrew.org/wiki/Account_services#IManagerForApplication */ class IManagerForApplication : public BaseService { + private: + std::shared_ptr> openedUsers; + public: - IManagerForApplication(const DeviceState &state, ServiceManager &manager); + IManagerForApplication(const DeviceState &state, ServiceManager &manager, std::vector &openedUsers); /** * @brief This checks if the given user has access to online services