mirror of
https://github.com/xenia-project/xenia.git
synced 2025-12-06 07:12:03 +01:00
[XAM/USER] - Implement Multiple Functions
- Implement XamUserGetCachedUserFlags, XamIsChildAccountSignedIn, XamUserGetOnlineLanguageFromXUID and XamUserGetOnlineCountryFromXUID - add IsParentalControlled()
This commit is contained in:
parent
fd1abfe6aa
commit
20d3ac4ca9
|
|
@ -95,10 +95,23 @@ class UserProfile {
|
||||||
uint32_t signin_state() const { return 1; }
|
uint32_t signin_state() const { return 1; }
|
||||||
uint32_t type() const { return 1 | 2; /* local | online profile? */ }
|
uint32_t type() const { return 1 | 2; /* local | online profile? */ }
|
||||||
|
|
||||||
|
uint32_t GetReservedFlags() const {
|
||||||
|
return account_info_.GetReservedFlags();
|
||||||
|
};
|
||||||
uint32_t GetCachedFlags() const { return account_info_.GetCachedFlags(); };
|
uint32_t GetCachedFlags() const { return account_info_.GetCachedFlags(); };
|
||||||
|
uint32_t GetCountry() const {
|
||||||
|
return static_cast<uint32_t>(account_info_.GetCountry());
|
||||||
|
};
|
||||||
uint32_t GetSubscriptionTier() const {
|
uint32_t GetSubscriptionTier() const {
|
||||||
return account_info_.GetSubscriptionTier();
|
return account_info_.GetSubscriptionTier();
|
||||||
}
|
}
|
||||||
|
uint32_t GetLanguage() const {
|
||||||
|
return static_cast<uint32_t>(account_info_.GetLanguage());
|
||||||
|
};
|
||||||
|
|
||||||
|
bool IsParentalControlled() const {
|
||||||
|
return account_info_.IsParentalControlled();
|
||||||
|
};
|
||||||
bool IsLiveEnabled() const { return account_info_.IsLiveEnabled(); }
|
bool IsLiveEnabled() const { return account_info_.IsLiveEnabled(); }
|
||||||
|
|
||||||
std::span<const uint8_t> GetProfileIcon(XTileType icon_type) {
|
std::span<const uint8_t> GetProfileIcon(XTileType icon_type) {
|
||||||
|
|
|
||||||
|
|
@ -733,6 +733,18 @@ dword_result_t XamIsXbox1TitleId_entry(dword_t title_id) {
|
||||||
}
|
}
|
||||||
DECLARE_XAM_EXPORT1(XamIsXbox1TitleId, kNone, kImplemented);
|
DECLARE_XAM_EXPORT1(XamIsXbox1TitleId, kNone, kImplemented);
|
||||||
|
|
||||||
|
dword_result_t XamIsChildAccountSignedIn_entry() {
|
||||||
|
for (uint32_t i = 0; i < XUserMaxUserCount; i++) {
|
||||||
|
const auto& profile = kernel_state()->xam_state()->GetUserProfile(i);
|
||||||
|
if (profile && profile->IsParentalControlled()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
DECLARE_XAM_EXPORT1(XamIsChildAccountSignedIn, kNone, kImplemented);
|
||||||
|
|
||||||
void XamSetActiveDashAppInfo_entry(pointer_t<X_DASH_APP_INFO> dash_app) {
|
void XamSetActiveDashAppInfo_entry(pointer_t<X_DASH_APP_INFO> dash_app) {
|
||||||
if (!dash_app) {
|
if (!dash_app) {
|
||||||
kernel_state()->dash_app_info_ = {};
|
kernel_state()->dash_app_info_ = {};
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
#include "third_party/stb/stb_image.h"
|
#include "third_party/stb/stb_image.h"
|
||||||
|
|
||||||
DECLARE_int32(user_language);
|
DECLARE_int32(user_language);
|
||||||
|
DECLARE_int32(user_country);
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace kernel {
|
namespace kernel {
|
||||||
|
|
@ -913,6 +914,18 @@ dword_result_t XamUserGetSubscriptionType_entry(dword_t user_index,
|
||||||
}
|
}
|
||||||
DECLARE_XAM_EXPORT1(XamUserGetSubscriptionType, kUserProfiles, kStub);
|
DECLARE_XAM_EXPORT1(XamUserGetSubscriptionType, kUserProfiles, kStub);
|
||||||
|
|
||||||
|
dword_result_t XamUserGetCachedUserFlags_entry(dword_t user_index) {
|
||||||
|
if (!kernel_state()->xam_state()->IsUserSignedIn(user_index)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto& user_profile =
|
||||||
|
kernel_state()->xam_state()->GetUserProfile(user_index);
|
||||||
|
|
||||||
|
return user_profile->GetCachedFlags();
|
||||||
|
}
|
||||||
|
DECLARE_XAM_EXPORT1(XamUserGetCachedUserFlags, kUserProfiles, kImplemented);
|
||||||
|
|
||||||
dword_result_t XamUserGetUserFlags_entry(dword_t user_index) {
|
dword_result_t XamUserGetUserFlags_entry(dword_t user_index) {
|
||||||
if (!kernel_state()->xam_state()->IsUserSignedIn(user_index)) {
|
if (!kernel_state()->xam_state()->IsUserSignedIn(user_index)) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -936,16 +949,24 @@ dword_result_t XamUserGetUserFlagsFromXUID_entry(qword_t xuid) {
|
||||||
DECLARE_XAM_EXPORT1(XamUserGetUserFlagsFromXUID, kUserProfiles, kImplemented);
|
DECLARE_XAM_EXPORT1(XamUserGetUserFlagsFromXUID, kUserProfiles, kImplemented);
|
||||||
|
|
||||||
dword_result_t XamUserGetOnlineLanguageFromXUID_entry(qword_t xuid) {
|
dword_result_t XamUserGetOnlineLanguageFromXUID_entry(qword_t xuid) {
|
||||||
/* Notes:
|
const auto& user = kernel_state()->xam_state()->GetUserProfile(xuid);
|
||||||
- Calls XamUserGetUserFlagsFromXUID and returns (ulonglong)(cached_flag <<
|
if (!user) {
|
||||||
0x20) >> 0x39 & 0x1f;
|
return cvars::user_language;
|
||||||
- XamUserGetMembershipTierFromXUID and XamUserGetOnlineCountryFromXUID also
|
}
|
||||||
call it
|
return user->GetLanguage();
|
||||||
- Removed in metro
|
|
||||||
*/
|
|
||||||
return cvars::user_language;
|
|
||||||
}
|
}
|
||||||
DECLARE_XAM_EXPORT1(XamUserGetOnlineLanguageFromXUID, kUserProfiles, kStub);
|
DECLARE_XAM_EXPORT1(XamUserGetOnlineLanguageFromXUID, kUserProfiles,
|
||||||
|
kImplemented);
|
||||||
|
|
||||||
|
dword_result_t XamUserGetOnlineCountryFromXUID_entry(qword_t xuid) {
|
||||||
|
const auto& user = kernel_state()->xam_state()->GetUserProfile(xuid);
|
||||||
|
if (!user) {
|
||||||
|
return cvars::user_country;
|
||||||
|
}
|
||||||
|
return user->GetCountry();
|
||||||
|
}
|
||||||
|
DECLARE_XAM_EXPORT1(XamUserGetOnlineCountryFromXUID, kUserProfiles,
|
||||||
|
kImplemented);
|
||||||
|
|
||||||
constexpr uint8_t kStatsMaxAmount = 64;
|
constexpr uint8_t kStatsMaxAmount = 64;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -812,6 +812,7 @@ struct X_XAMACCOUNTINFO {
|
||||||
return std::string_view(online_domain);
|
return std::string_view(online_domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t GetReservedFlags() const { return reserved_flags; };
|
||||||
uint32_t GetCachedFlags() const { return cached_user_flags; };
|
uint32_t GetCachedFlags() const { return cached_user_flags; };
|
||||||
|
|
||||||
XOnlineCountry GetCountry() const {
|
XOnlineCountry GetCountry() const {
|
||||||
|
|
@ -823,6 +824,10 @@ struct X_XAMACCOUNTINFO {
|
||||||
(cached_user_flags & kSubscriptionTierMask) >> 20);
|
(cached_user_flags & kSubscriptionTierMask) >> 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsParentalControlled() const {
|
||||||
|
return static_cast<bool>((cached_user_flags & kLanguageMask) >> 24);
|
||||||
|
}
|
||||||
|
|
||||||
XLanguage GetLanguage() const {
|
XLanguage GetLanguage() const {
|
||||||
return static_cast<XLanguage>((cached_user_flags & kLanguageMask) >> 25);
|
return static_cast<XLanguage>((cached_user_flags & kLanguageMask) >> 25);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue