mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-26 21:34:16 +01:00
Align code style with project
* Return correct error code for invalid user * Always return first icon color
This commit is contained in:
parent
ffb9e743dd
commit
93da9f2826
@ -54,7 +54,6 @@ namespace skyline {
|
|||||||
constexpr u32 MaxHandles = 0xEE01; //!< "Too many handles"
|
constexpr u32 MaxHandles = 0xEE01; //!< "Too many handles"
|
||||||
constexpr u32 NotFound = 0xF201; //!< "Not found"
|
constexpr u32 NotFound = 0xF201; //!< "Not found"
|
||||||
constexpr u32 Unimpl = 0x177202; //!< "Unimplemented behaviour"
|
constexpr u32 Unimpl = 0x177202; //!< "Unimplemented behaviour"
|
||||||
constexpr u32 InvArg = 0x2c7c; //!< "Argument is invalid"
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
||||||
|
|
||||||
#include "IManagerForApplication.h"
|
#include "IManagerForApplication.h"
|
||||||
#include "IAccountServiceForApplication.h"
|
|
||||||
#include "IProfile.h"
|
#include "IProfile.h"
|
||||||
|
#include "IAccountServiceForApplication.h"
|
||||||
|
|
||||||
namespace skyline::service::account {
|
namespace skyline::service::account {
|
||||||
IAccountServiceForApplication::IAccountServiceForApplication(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::account_IAccountServiceForApplication, "account:IAccountServiceForApplication", {
|
IAccountServiceForApplication::IAccountServiceForApplication(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::account_IAccountServiceForApplication, "account:IAccountServiceForApplication", {
|
||||||
@ -29,7 +29,7 @@ namespace skyline::service::account {
|
|||||||
void IAccountServiceForApplication::GetProfile(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
void IAccountServiceForApplication::GetProfile(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
auto id = request.Pop<UserId>();
|
auto id = request.Pop<UserId>();
|
||||||
if (id != constant::DefaultUserId) {
|
if (id != constant::DefaultUserId) {
|
||||||
response.errorCode = constant::status::InvArg;
|
response.errorCode = constant::InvUser;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,10 +15,6 @@ namespace skyline {
|
|||||||
u64 upper; //!< The upper 64 bits of the user ID
|
u64 upper; //!< The upper 64 bits of the user ID
|
||||||
u64 lower; //!< The lower 64 bits of the user ID
|
u64 lower; //!< The lower 64 bits of the user ID
|
||||||
|
|
||||||
/**
|
|
||||||
* @param userId The user ID to compare with
|
|
||||||
* @return Whether this user ID matches the one given as a parameter
|
|
||||||
*/
|
|
||||||
inline constexpr bool operator==(const UserId &userId) {
|
inline constexpr bool operator==(const UserId &userId) {
|
||||||
return upper == userId.upper && lower == userId.lower;
|
return upper == userId.upper && lower == userId.lower;
|
||||||
}
|
}
|
||||||
@ -63,5 +59,7 @@ namespace skyline {
|
|||||||
|
|
||||||
namespace constant {
|
namespace constant {
|
||||||
constexpr service::account::UserId DefaultUserId = {0x0000000000000001, 0x0000000000000000}; //!< The default user ID
|
constexpr service::account::UserId DefaultUserId = {0x0000000000000001, 0x0000000000000000}; //!< The default user ID
|
||||||
|
|
||||||
|
constexpr u32 InvUser = 0xC87C; //!< Invalid user
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,20 +5,33 @@
|
|||||||
#include "IProfile.h"
|
#include "IProfile.h"
|
||||||
|
|
||||||
namespace skyline::service::account {
|
namespace skyline::service::account {
|
||||||
IProfile::IProfile(const DeviceState &state, ServiceManager &manager, const UserId &userId) : BaseService(state, manager, Service::account_IProfile, "account:IProfile", {
|
IProfile::IProfile(const DeviceState &state, ServiceManager &manager, const UserId &userId) : userId(userId), BaseService(state, manager, Service::account_IProfile, "account:IProfile", {
|
||||||
{0x0, SFUNC(IProfile::Get)}
|
{0x0, SFUNC(IProfile::Get)}
|
||||||
}) {}
|
}) {}
|
||||||
|
|
||||||
void IProfile::Get(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
void IProfile::Get(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
AccountUserData userData{};
|
struct AccountUserData {
|
||||||
AccountProfileBase profileBase{};
|
u32 _unk0_; //!< Unknown.
|
||||||
|
u32 iconID; //!< Icon ID (0 = Mii, the rest are character icon IDs).
|
||||||
|
u8 iconBackgroundColorID; //!< Profile icon background color ID
|
||||||
|
std::array<u8, 0x7> _unk1_; //!< Unknown.
|
||||||
|
std::array<u8, 0x10> miiID; //!< Some ID related to the Mii? All zeros when a character icon is used.
|
||||||
|
std::array<u8, 0x60> _unk2_; //!< Unknown.
|
||||||
|
};
|
||||||
|
|
||||||
|
struct {
|
||||||
|
UserId uid; //!< The UID of the corresponding account
|
||||||
|
u64 lastEditTimestamp; //!< A POSIX UTC timestamp denoting the last account edit.
|
||||||
|
std::array<char, 0x20> nickname; //!< UTF-8 Nickname.
|
||||||
|
} accountProfileBase = {.uid = userId};
|
||||||
|
|
||||||
std::string username = state.settings->GetString("username_value");
|
std::string username = state.settings->GetString("username_value");
|
||||||
size_t usernameSize = std::min(sizeof(profileBase), username.size());
|
size_t usernameSize = std::min(accountProfileBase.nickname.size(), username.size());
|
||||||
std::memcpy(profileBase.nickname, username.c_str(), usernameSize);
|
std::memcpy(accountProfileBase.nickname.data(), username.c_str(), usernameSize);
|
||||||
profileBase.nickname[usernameSize] = '\0';
|
|
||||||
|
|
||||||
state.process->WriteMemory(userData, request.outputBuf.at(0).address);
|
AccountUserData *userData = state.process->GetPointer<AccountUserData>(request.outputBuf.at(0).address);
|
||||||
response.Push(profileBase);
|
userData->iconBackgroundColorID = 0x1; // Color indexing starts at 0x1
|
||||||
|
|
||||||
|
response.Push(accountProfileBase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,23 +8,6 @@
|
|||||||
|
|
||||||
namespace skyline::service::account {
|
namespace skyline::service::account {
|
||||||
|
|
||||||
/// UserData
|
|
||||||
typedef struct {
|
|
||||||
u32 unk_x0; ///< Unknown.
|
|
||||||
u32 iconID; ///< Icon ID. 0 = Mii, the rest are character icon IDs.
|
|
||||||
u8 iconBackgroundColorID; ///< Profile icon background color ID
|
|
||||||
u8 unk_x9[0x7]; ///< Unknown.
|
|
||||||
u8 miiID[0x10]; ///< Some ID related to the Mii? All zeros when a character icon is used.
|
|
||||||
u8 unk_x20[0x60]; ///< Usually zeros?
|
|
||||||
} AccountUserData;
|
|
||||||
|
|
||||||
/// ProfileBase
|
|
||||||
typedef struct {
|
|
||||||
UserId uid; ///< \ref AccountUid
|
|
||||||
u64 lastEditTimestamp; ///< POSIX UTC timestamp, for the last account edit.
|
|
||||||
char nickname[0x20]; ///< UTF-8 Nickname.
|
|
||||||
} AccountProfileBase;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief IProfile provides functions for reading user profile (https://switchbrew.org/wiki/Account_services#IProfile)
|
* @brief IProfile provides functions for reading user profile (https://switchbrew.org/wiki/Account_services#IProfile)
|
||||||
*/
|
*/
|
||||||
@ -33,8 +16,11 @@ namespace skyline::service::account {
|
|||||||
IProfile(const DeviceState &state, ServiceManager &manager, const UserId &userId);
|
IProfile(const DeviceState &state, ServiceManager &manager, const UserId &userId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
UserId userId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This returns AccountUserData (optional) and AccountProfileBase
|
* @brief This returns AccountUserData and AccountProfileBase objects that describe the user's information
|
||||||
*/
|
*/
|
||||||
void Get(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
void Get(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
};
|
};
|
||||||
|
@ -13,8 +13,7 @@ import androidx.preference.EditTextPreference
|
|||||||
import emu.skyline.R
|
import emu.skyline.R
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [EditTextPreference] lacks the feature to set the automatically value as summary.
|
* This class adapts [EditTextPreference] so that it supports setting the value as the summary automatically. Also added useful attributes.
|
||||||
* This class adds this missing thing. Also added useful attributes.
|
|
||||||
*/
|
*/
|
||||||
class CustomEditTextPreference : EditTextPreference {
|
class CustomEditTextPreference : EditTextPreference {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user