mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Merge pull request #7069 from lioncash/uuid
common/uuid: Add validity checking functions to interface
This commit is contained in:
		@@ -58,6 +58,13 @@ struct UUID {
 | 
			
		||||
        uuid = INVALID_UUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [[nodiscard]] constexpr bool IsInvalid() const {
 | 
			
		||||
        return uuid == INVALID_UUID;
 | 
			
		||||
    }
 | 
			
		||||
    [[nodiscard]] constexpr bool IsValid() const {
 | 
			
		||||
        return !IsInvalid();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO(ogniK): Properly generate a Nintendo ID
 | 
			
		||||
    [[nodiscard]] constexpr u64 GetNintendoID() const {
 | 
			
		||||
        return uuid[0];
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,8 @@ ProfileSelectApplet::~ProfileSelectApplet() = default;
 | 
			
		||||
void DefaultProfileSelectApplet::SelectProfile(
 | 
			
		||||
    std::function<void(std::optional<Common::UUID>)> callback) const {
 | 
			
		||||
    Service::Account::ProfileManager manager;
 | 
			
		||||
    callback(manager.GetUser(Settings::values.current_user.GetValue()).value_or(Common::UUID{}));
 | 
			
		||||
    callback(manager.GetUser(Settings::values.current_user.GetValue())
 | 
			
		||||
                 .value_or(Common::UUID{Common::INVALID_UUID}));
 | 
			
		||||
    LOG_INFO(Service_ACC, "called, selecting current user instead of prompting...");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -929,8 +929,7 @@ void Module::Interface::TrySelectUserWithoutInteraction(Kernel::HLERequestContex
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto user_list = profile_manager->GetAllUsers();
 | 
			
		||||
    if (std::all_of(user_list.begin(), user_list.end(),
 | 
			
		||||
                    [](const auto& user) { return user.uuid == Common::INVALID_UUID; })) {
 | 
			
		||||
    if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) {
 | 
			
		||||
        rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code
 | 
			
		||||
        rb.PushRaw<u128>(Common::INVALID_UUID);
 | 
			
		||||
        return;
 | 
			
		||||
 
 | 
			
		||||
@@ -208,9 +208,10 @@ bool ProfileManager::UserExists(UUID uuid) const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProfileManager::UserExistsIndex(std::size_t index) const {
 | 
			
		||||
    if (index >= MAX_USERS)
 | 
			
		||||
    if (index >= MAX_USERS) {
 | 
			
		||||
        return false;
 | 
			
		||||
    return profiles[index].user_uuid.uuid != Common::INVALID_UUID;
 | 
			
		||||
    }
 | 
			
		||||
    return profiles[index].user_uuid.IsValid();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Opens a specific user
 | 
			
		||||
@@ -304,7 +305,7 @@ bool ProfileManager::RemoveUser(UUID uuid) {
 | 
			
		||||
 | 
			
		||||
bool ProfileManager::SetProfileBase(UUID uuid, const ProfileBase& profile_new) {
 | 
			
		||||
    const auto index = GetUserIndex(uuid);
 | 
			
		||||
    if (!index || profile_new.user_uuid == UUID(Common::INVALID_UUID)) {
 | 
			
		||||
    if (!index || profile_new.user_uuid.IsInvalid()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -346,7 +347,7 @@ void ProfileManager::ParseUserSaveFile() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (const auto& user : data.users) {
 | 
			
		||||
        if (user.uuid == UUID(Common::INVALID_UUID)) {
 | 
			
		||||
        if (user.uuid.IsInvalid()) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ void ProfileSelect::Execute() {
 | 
			
		||||
void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) {
 | 
			
		||||
    UserSelectionOutput output{};
 | 
			
		||||
 | 
			
		||||
    if (uuid.has_value() && uuid->uuid != Common::INVALID_UUID) {
 | 
			
		||||
    if (uuid.has_value() && uuid->IsValid()) {
 | 
			
		||||
        output.result = 0;
 | 
			
		||||
        output.uuid_selected = uuid->uuid;
 | 
			
		||||
    } else {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user