/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2024 Xenia Canary. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include "xenia/kernel/xam/xam_state.h" #include "xenia/emulator.h" namespace xe { namespace kernel { namespace xam { XamState::XamState(Emulator* emulator, KernelState* kernel_state) : kernel_state_(kernel_state) { app_manager_ = std::make_unique(); auto content_root = emulator->content_root(); if (!content_root.empty()) { content_root = std::filesystem::absolute(content_root); } content_manager_ = std::make_unique(kernel_state, content_root); user_tracker_ = std::make_unique(); profile_manager_ = std::make_unique(kernel_state, user_tracker_.get()); achievement_manager_ = std::make_unique(); AppManager::RegisterApps(kernel_state, app_manager_.get()); } UserProfile* XamState::GetUserProfile(uint32_t user_index) const { if (user_index >= XUserMaxUserCount && user_index < XUserIndexLatest) { return nullptr; } return profile_manager_->GetProfile(static_cast(user_index)); } UserProfile* XamState::GetUserProfile(uint64_t xuid) const { return profile_manager_->GetProfile(xuid); } bool XamState::IsUserSignedIn(uint32_t user_index) const { return profile_manager_->GetProfile(static_cast(user_index)) != nullptr; } bool XamState::IsUserSignedIn(uint64_t xuid) const { return GetUserProfile(xuid) != nullptr; } void XamState::LoadSpaInfo(const SpaInfo* info) { if (!info) { return; } // Check if we have loaded SpaInfo already. If yes then check currently loaded // version. if (spa_info_) { // Trying to load spa with lower version, for whatever reason. if (*info <= *spa_info_) { return; } } spa_info_ = std::make_unique(*info); spa_info_->Load(); user_tracker_->UpdateSpaInfo(spa_info_.get()); } } // namespace xam } // namespace kernel } // namespace xe