ksys: Add Account

This commit is contained in:
Léo Lam
2020-09-25 00:26:36 +02:00
parent 72d100323c
commit 89137d9834
5 changed files with 91 additions and 9 deletions
+43
View File
@@ -0,0 +1,43 @@
#include "KingSystem/System/Account.h"
#include <nn/account.h>
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
+37
View File
@@ -0,0 +1,37 @@
#pragma once
#include <heap/seadDisposer.h>
#include <prim/seadTypedBitFlag.h>
#include "KingSystem/Utils/Types.h"
namespace nn::account {
class Uid;
class UserHandle;
} // namespace nn::account
namespace ksys {
class Account {
SEAD_SINGLETON_DISPOSER(Account)
Account() = default;
virtual ~Account();
public:
void init(sead::Heap* heap);
nn::account::UserHandle* getUserHandle() const;
void getUserId(nn::account::Uid* uid) const;
private:
enum class Flag : u8 {
HasUserHandle = 0x1,
HasOpenedUserSuccessfully = 0x2,
};
void* _28 = nullptr;
sead::TypedBitFlag<Flag> mFlags;
nn::account::UserHandle* mUserHandle = nullptr;
};
KSYS_CHECK_SIZE_NX150(Account, 0x40);
} // namespace ksys
+2
View File
@@ -1,4 +1,6 @@
target_sources(uking PRIVATE
Account.cpp
Account.h
OverlayArena.cpp
OverlayArena.h
OverlayArenaSystem.cpp