Merge pull request #12665 from german77/proof
service: acc: Only save profiles when profiles have changed
This commit is contained in:
		@@ -61,9 +61,7 @@ ProfileManager::ProfileManager() {
 | 
			
		||||
    OpenUser(*GetUser(current));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ProfileManager::~ProfileManager() {
 | 
			
		||||
    WriteUserSaveFile();
 | 
			
		||||
}
 | 
			
		||||
ProfileManager::~ProfileManager() = default;
 | 
			
		||||
 | 
			
		||||
/// After a users creation it needs to be "registered" to the system. AddToProfiles handles the
 | 
			
		||||
/// internal management of the users profiles
 | 
			
		||||
@@ -113,6 +111,8 @@ Result ProfileManager::CreateNewUser(UUID uuid, const ProfileUsername& username)
 | 
			
		||||
        return ERROR_USER_ALREADY_EXISTS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    is_save_needed = true;
 | 
			
		||||
 | 
			
		||||
    return AddUser({
 | 
			
		||||
        .user_uuid = uuid,
 | 
			
		||||
        .username = username,
 | 
			
		||||
@@ -326,6 +326,9 @@ bool ProfileManager::RemoveUser(UUID uuid) {
 | 
			
		||||
    profiles[*index] = ProfileInfo{};
 | 
			
		||||
    std::stable_partition(profiles.begin(), profiles.end(),
 | 
			
		||||
                          [](const ProfileInfo& profile) { return profile.user_uuid.IsValid(); });
 | 
			
		||||
 | 
			
		||||
    is_save_needed = true;
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -340,6 +343,8 @@ bool ProfileManager::SetProfileBase(UUID uuid, const ProfileBase& profile_new) {
 | 
			
		||||
    profile.username = profile_new.username;
 | 
			
		||||
    profile.creation_time = profile_new.timestamp;
 | 
			
		||||
 | 
			
		||||
    is_save_needed = true;
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -348,6 +353,7 @@ bool ProfileManager::SetProfileBaseAndData(Common::UUID uuid, const ProfileBase&
 | 
			
		||||
    const auto index = GetUserIndex(uuid);
 | 
			
		||||
    if (index.has_value() && SetProfileBase(uuid, profile_new)) {
 | 
			
		||||
        profiles[*index].data = data_new;
 | 
			
		||||
        is_save_needed = true;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -391,6 +397,10 @@ void ProfileManager::ParseUserSaveFile() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ProfileManager::WriteUserSaveFile() {
 | 
			
		||||
    if (!is_save_needed) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ProfileDataRaw raw{};
 | 
			
		||||
 | 
			
		||||
    for (std::size_t i = 0; i < MAX_USERS; ++i) {
 | 
			
		||||
@@ -423,7 +433,10 @@ void ProfileManager::WriteUserSaveFile() {
 | 
			
		||||
    if (!save.IsOpen() || !save.SetSize(sizeof(ProfileDataRaw)) || !save.WriteObject(raw)) {
 | 
			
		||||
        LOG_WARNING(Service_ACC, "Failed to write save data to file... No changes to user data "
 | 
			
		||||
                                 "made in current session will be saved.");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    is_save_needed = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}; // namespace Service::Account
 | 
			
		||||
 
 | 
			
		||||
@@ -103,6 +103,7 @@ private:
 | 
			
		||||
    std::optional<std::size_t> AddToProfiles(const ProfileInfo& profile);
 | 
			
		||||
    bool RemoveProfileAtIndex(std::size_t index);
 | 
			
		||||
 | 
			
		||||
    bool is_save_needed{};
 | 
			
		||||
    std::array<ProfileInfo, MAX_USERS> profiles{};
 | 
			
		||||
    std::array<ProfileInfo, MAX_USERS> stored_opened_profiles{};
 | 
			
		||||
    std::size_t user_count{};
 | 
			
		||||
 
 | 
			
		||||
@@ -205,6 +205,7 @@ void ConfigureProfileManager::AddUser() {
 | 
			
		||||
 | 
			
		||||
    const auto uuid = Common::UUID::MakeRandom();
 | 
			
		||||
    profile_manager.CreateNewUser(uuid, username.toStdString());
 | 
			
		||||
    profile_manager.WriteUserSaveFile();
 | 
			
		||||
 | 
			
		||||
    item_model->appendRow(new QStandardItem{GetIcon(uuid), FormatUserEntryText(username, uuid)});
 | 
			
		||||
}
 | 
			
		||||
@@ -228,6 +229,7 @@ void ConfigureProfileManager::RenameUser() {
 | 
			
		||||
    std::copy(username_std.begin(), username_std.end(), profile.username.begin());
 | 
			
		||||
 | 
			
		||||
    profile_manager.SetProfileBase(*uuid, profile);
 | 
			
		||||
    profile_manager.WriteUserSaveFile();
 | 
			
		||||
 | 
			
		||||
    item_model->setItem(
 | 
			
		||||
        user, 0,
 | 
			
		||||
@@ -256,6 +258,8 @@ void ConfigureProfileManager::DeleteUser(const Common::UUID& uuid) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    profile_manager.WriteUserSaveFile();
 | 
			
		||||
 | 
			
		||||
    item_model->removeRows(tree_view->currentIndex().row(), 1);
 | 
			
		||||
    tree_view->clearSelection();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user