[XAM] UserTracker: Added option to return user specific list of contexts and properties

This commit is contained in:
Gliniak 2025-03-08 18:12:36 +01:00
parent da89b6a0c3
commit d2f350d0d3
2 changed files with 46 additions and 0 deletions

View File

@ -641,6 +641,50 @@ std::optional<uint32_t> UserTracker::GetUserContext(uint64_t xuid,
return entry->get_data()->data.u32;
}
std::vector<AttributeKey> UserTracker::GetUserContextIds(uint64_t xuid) const {
if (!IsUserTracked(xuid)) {
return {};
}
auto user = kernel_state()->xam_state()->GetUserProfile(xuid);
if (!user) {
return {};
}
std::vector<AttributeKey> entries;
for (const auto& property : user->properties_) {
if (!property.IsContext()) {
continue;
}
entries.push_back(property.GetPropertyId());
}
return entries;
}
std::vector<AttributeKey> UserTracker::GetUserPropertyIds(uint64_t xuid) const {
if (!IsUserTracked(xuid)) {
return {};
}
auto user = kernel_state()->xam_state()->GetUserProfile(xuid);
if (!user) {
return {};
}
std::vector<AttributeKey> entries;
for (const auto& property : user->properties_) {
if (property.IsContext()) {
continue;
}
entries.push_back(property.GetPropertyId());
}
return entries;
}
void UserTracker::UpdateSettingValue(uint64_t xuid, uint32_t title_id,
UserSettingId setting_id,
int32_t difference) {

View File

@ -62,12 +62,14 @@ class UserTracker {
// Context
void UpdateContext(uint64_t xuid, uint32_t id, uint32_t value);
std::optional<uint32_t> GetUserContext(uint64_t xuid, uint32_t id) const;
std::vector<AttributeKey> GetUserContextIds(uint64_t xuid) const;
// Property
void AddProperty(const uint64_t xuid, const Property* property);
X_STATUS GetProperty(const uint64_t xuid, uint32_t* property_size,
XUSER_PROPERTY* property);
const Property* GetProperty(const uint64_t xuid, const uint32_t id) const;
std::vector<AttributeKey> GetUserPropertyIds(uint64_t xuid) const;
// Settings
void UpsertSetting(uint64_t xuid, uint32_t title_id,