diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-10-13 13:02:33 -0400 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-10-23 19:31:28 -0400 |
commit | 45f2a2fe29373f261144c097d169dad8b65fe012 (patch) | |
tree | 610b04ce839b40eaab1fe297c625b34eaf76e9cd /src/yuzu | |
parent | e408bbceed90da8965480e23d05fb764fcbfbb84 (diff) |
acc: Fix account UUID duplication error
Diffstat (limited to 'src/yuzu')
-rw-r--r-- | src/yuzu/configuration/config.cpp | 3 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_system.cpp | 86 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 28 |
3 files changed, 56 insertions, 61 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index f7a9a8dd4..1fe9a7edd 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -125,7 +125,8 @@ void Config::ReadValues() { Settings::values.use_docked_mode = qt_config->value("use_docked_mode", false).toBool(); Settings::values.enable_nfc = qt_config->value("enable_nfc", true).toBool(); - Settings::values.current_user = std::clamp(qt_config->value("current_user", 0).toInt(), 0, 7); + Settings::values.current_user = std::clamp<int>(qt_config->value("current_user", 0).toInt(), 0, + Service::Account::MAX_USERS - 1); Settings::values.language_index = qt_config->value("language_index", 1).toInt(); qt_config->endGroup(); diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp index 87301b5a2..02e061ebc 100644 --- a/src/yuzu/configuration/configure_system.cpp +++ b/src/yuzu/configuration/configure_system.cpp @@ -131,38 +131,33 @@ static QPixmap GetIcon(Service::Account::UUID uuid) { void ConfigureSystem::PopulateUserList() { const auto& profiles = profile_manager->GetAllUsers(); - std::transform( - profiles.begin(), profiles.end(), std::back_inserter(list_items), - [this](const Service::Account::UUID& user) { - Service::Account::ProfileBase profile; - if (!profile_manager->GetProfileBase(user, profile)) - return QList<QStandardItem*>{}; - const auto username = Common::StringFromFixedZeroTerminatedBuffer( - reinterpret_cast<const char*>(profile.username.data()), profile.username.size()); - - return QList<QStandardItem*>{new QStandardItem{ - GetIcon(user).scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), - QString::fromStdString(username + '\n' + user.FormatSwitch())}}; - }); - - list_items.erase( - std::remove_if(list_items.begin(), list_items.end(), - [](const auto& list) { return list == QList<QStandardItem*>{}; }), - list_items.end()); + for (const auto& user : profiles) { + Service::Account::ProfileBase profile; + if (!profile_manager->GetProfileBase(user, profile)) + continue; + + const auto username = Common::StringFromFixedZeroTerminatedBuffer( + reinterpret_cast<const char*>(profile.username.data()), profile.username.size()); + + list_items.push_back(QList<QStandardItem*>{new QStandardItem{ + GetIcon(user).scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), + QString::fromStdString(username + '\n' + user.FormatSwitch())}}); + } for (const auto& item : list_items) item_model->appendRow(item); } void ConfigureSystem::UpdateCurrentUser() { - ui->pm_add->setEnabled(profile_manager->GetUserCount() < 8); + ui->pm_add->setEnabled(profile_manager->GetUserCount() < Service::Account::MAX_USERS); - const auto& current_user = profile_manager->GetAllUsers()[Settings::values.current_user]; - const auto username = GetAccountUsername(current_user); + const auto& current_user = profile_manager->GetUser(Settings::values.current_user); + ASSERT(current_user != boost::none); + const auto username = GetAccountUsername(*current_user); scene->clear(); scene->addPixmap( - GetIcon(current_user).scaled(48, 48, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + GetIcon(*current_user).scaled(48, 48, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); ui->current_user_username->setText(QString::fromStdString(username)); } @@ -255,13 +250,12 @@ void ConfigureSystem::AddUser() { void ConfigureSystem::RenameUser() { const auto user = tree_view->currentIndex().row(); - ASSERT(user < 8); - - const auto uuid = profile_manager->GetAllUsers()[user]; - const auto username = GetAccountUsername(uuid); + const auto uuid = profile_manager->GetUser(user); + ASSERT(uuid != boost::none); + const auto username = GetAccountUsername(*uuid); Service::Account::ProfileBase profile; - if (!profile_manager->GetProfileBase(uuid, profile)) + if (!profile_manager->GetProfileBase(*uuid, profile)) return; bool ok = false; @@ -273,26 +267,28 @@ void ConfigureSystem::RenameUser() { return; const auto username_std = new_username.toStdString(); - if (username_std.size() > profile.username.size()) - std::copy_n(username_std.begin(), profile.username.size(), profile.username.begin()); - else + if (username_std.size() > profile.username.size()) { + std::copy_n(username_std.begin(), std::min(profile.username.size(), username_std.size()), + profile.username.begin()); + } else { std::copy(username_std.begin(), username_std.end(), profile.username.begin()); + } - profile_manager->SetProfileBase(uuid, profile); + profile_manager->SetProfileBase(*uuid, profile); item_model->setItem( user, 0, new QStandardItem{ - GetIcon(uuid).scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), - QString::fromStdString(username_std + '\n' + uuid.FormatSwitch())}); + GetIcon(*uuid).scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), + QString::fromStdString(username_std + '\n' + uuid->FormatSwitch())}); UpdateCurrentUser(); } void ConfigureSystem::DeleteUser() { const auto index = tree_view->currentIndex().row(); - ASSERT(index < 8); - const auto uuid = profile_manager->GetAllUsers()[index]; - const auto username = GetAccountUsername(uuid); + const auto uuid = profile_manager->GetUser(index); + ASSERT(uuid != boost::none); + const auto username = GetAccountUsername(*uuid); const auto confirm = QMessageBox::question( this, tr("Confirm Delete"), @@ -305,7 +301,7 @@ void ConfigureSystem::DeleteUser() { Settings::values.current_user = 0; UpdateCurrentUser(); - if (!profile_manager->RemoveUser(uuid)) + if (!profile_manager->RemoveUser(*uuid)) return; item_model->removeRows(tree_view->currentIndex().row(), 1); @@ -317,9 +313,9 @@ void ConfigureSystem::DeleteUser() { void ConfigureSystem::SetUserImage() { const auto index = tree_view->currentIndex().row(); - ASSERT(index < 8); - const auto uuid = profile_manager->GetAllUsers()[index]; - const auto username = GetAccountUsername(uuid); + const auto uuid = profile_manager->GetUser(index); + ASSERT(uuid != boost::none); + const auto username = GetAccountUsername(*uuid); const auto file = QFileDialog::getOpenFileName(this, tr("Select User Image"), QString(), "JPEG Images (*.jpg *.jpeg)"); @@ -327,20 +323,20 @@ void ConfigureSystem::SetUserImage() { if (file.isEmpty()) return; - FileUtil::Delete(GetImagePath(uuid)); + FileUtil::Delete(GetImagePath(*uuid)); const auto raw_path = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir) + "/system/save/8000000000000010"; if (FileUtil::Exists(raw_path) && !FileUtil::IsDirectory(raw_path)) FileUtil::Delete(raw_path); - FileUtil::CreateFullPath(GetImagePath(uuid)); - FileUtil::Copy(file.toStdString(), GetImagePath(uuid)); + FileUtil::CreateFullPath(GetImagePath(*uuid)); + FileUtil::Copy(file.toStdString(), GetImagePath(*uuid)); item_model->setItem( index, 0, new QStandardItem{ - GetIcon(uuid).scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), - QString::fromStdString(username + '\n' + uuid.FormatSwitch())}); + GetIcon(*uuid).scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), + QString::fromStdString(username + '\n' + uuid->FormatSwitch())}); UpdateCurrentUser(); } diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 9a3535e77..47f494841 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -762,19 +762,16 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target Service::Account::ProfileManager manager{}; const auto user_ids = manager.GetAllUsers(); QStringList list; - std::transform( - user_ids.begin(), user_ids.end(), std::back_inserter(list), - [&manager](const auto& user_id) -> QString { - if (user_id == Service::Account::UUID{}) - return ""; - Service::Account::ProfileBase base; - if (!manager.GetProfileBase(user_id, base)) - return ""; - - return QString::fromStdString(Common::StringFromFixedZeroTerminatedBuffer( - reinterpret_cast<const char*>(base.username.data()), base.username.size())); - }); - list.removeAll(""); + for (const auto& user_id : user_ids) { + if (user_id == Service::Account::UUID{}) + continue; + Service::Account::ProfileBase base; + if (!manager.GetProfileBase(user_id, base)) + continue; + + list.push_back(QString::fromStdString(Common::StringFromFixedZeroTerminatedBuffer( + reinterpret_cast<const char*>(base.username.data()), base.username.size()))); + } bool ok = false; const auto index_string = @@ -787,10 +784,11 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target const auto index = list.indexOf(index_string); ASSERT(index != -1 && index < 8); - const auto user_id = manager.GetAllUsers()[index]; + const auto user_id = manager.GetUser(index); + ASSERT(user_id != boost::none); path = nand_dir + FileSys::SaveDataFactory::GetFullPath(FileSys::SaveDataSpaceId::NandUser, FileSys::SaveDataType::SaveData, - program_id, user_id.uuid, 0); + program_id, user_id->uuid, 0); if (!FileUtil::Exists(path)) { FileUtil::CreateFullPath(path); |