From 89137d98348f704569eccea55ca678fc27489917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 25 Sep 2020 00:26:36 +0200 Subject: ksys: Add Account --- src/KingSystem/System/Account.cpp | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/KingSystem/System/Account.cpp (limited to 'src/KingSystem/System/Account.cpp') diff --git a/src/KingSystem/System/Account.cpp b/src/KingSystem/System/Account.cpp new file mode 100644 index 00000000..540914b8 --- /dev/null +++ b/src/KingSystem/System/Account.cpp @@ -0,0 +1,43 @@ +#include "KingSystem/System/Account.h" +#include + +namespace ksys { + +SEAD_SINGLETON_DISPOSER_IMPL(Account) + +Account::~Account() { + if (mFlags.isOn(Flag::HasUserHandle)) { + if (mUserHandle) { + delete mUserHandle; + mUserHandle = nullptr; + } + mFlags.reset(Flag::HasUserHandle); + } +} + +void Account::init(sead::Heap* heap) { + mUserHandle = new (heap) nn::account::UserHandle{}; + + nn::account::Initialize(); + + if (mFlags.isOff(Flag::HasOpenedUserSuccessfully)) { + const auto result = nn::account::OpenPreselectedUser(mUserHandle); + if (result.IsSuccess()) + mFlags.set(Flag::HasOpenedUserSuccessfully); + } + + mFlags.set(Flag::HasUserHandle); +} + +nn::account::UserHandle* Account::getUserHandle() const { + return mUserHandle; +} + +void Account::getUserId(nn::account::Uid* uid) const { + if (mUserHandle) + nn::account::GetUserId(uid, *mUserHandle); + else + *uid = {}; +} + +} // namespace ksys -- cgit v1.2.3