diff options
author | bunnei <bunneidev@gmail.com> | 2020-04-14 15:08:13 -0400 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2020-05-11 12:54:30 -0400 |
commit | 551c61bf2781250d2817a7429a7a6c4b98ed7dc4 (patch) | |
tree | 9b116432c2cce519e5be2a4124de10b6b21a8445 /src/yuzu/main.cpp | |
parent | ab9ddab0a21fa447f8cd93df0d529069e5a1cae0 (diff) |
yuzu: game_list: Fix 'Open Save Data Location' for device saves.
Diffstat (limited to 'src/yuzu/main.cpp')
-rw-r--r-- | src/yuzu/main.cpp | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 86e8a1d49..437464797 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1154,39 +1154,61 @@ void GMainWindow::OnGameListLoadFile(QString game_path) { BootGame(game_path); } -void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target) { +void GMainWindow::OnGameListOpenFolder(GameListOpenTarget target, const std::string& game_path) { std::string path; QString open_target; + + const auto v_file = Core::GetGameFileFromPath(vfs, game_path); + const auto loader = Loader::GetLoader(v_file); + FileSys::NACP control{}; + u64 program_id{}; + + loader->ReadControlData(control); + loader->ReadProgramId(program_id); + + const bool has_user_save{control.GetDefaultNormalSaveSize() > 0}; + const bool has_device_save{control.GetDeviceSaveDataSize() > 0}; + + ASSERT_MSG(has_user_save != has_device_save, "Game uses both user and device savedata?"); + switch (target) { case GameListOpenTarget::SaveData: { open_target = tr("Save Data"); const std::string nand_dir = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir); ASSERT(program_id != 0); - const auto select_profile = [this] { - QtProfileSelectionDialog dialog(this); - dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | - Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); - dialog.setWindowModality(Qt::WindowModal); + if (has_user_save) { + // User save data + const auto select_profile = [this] { + QtProfileSelectionDialog dialog(this); + dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | + Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); + dialog.setWindowModality(Qt::WindowModal); - if (dialog.exec() == QDialog::Rejected) { - return -1; - } + if (dialog.exec() == QDialog::Rejected) { + return -1; + } - return dialog.GetIndex(); - }; + return dialog.GetIndex(); + }; - const auto index = select_profile(); - if (index == -1) { - return; - } + const auto index = select_profile(); + if (index == -1) { + return; + } - Service::Account::ProfileManager manager; - const auto user_id = manager.GetUser(static_cast<std::size_t>(index)); - ASSERT(user_id); - path = nand_dir + FileSys::SaveDataFactory::GetFullPath(FileSys::SaveDataSpaceId::NandUser, - FileSys::SaveDataType::SaveData, - program_id, user_id->uuid, 0); + Service::Account::ProfileManager manager; + const auto user_id = manager.GetUser(static_cast<std::size_t>(index)); + ASSERT(user_id); + path = nand_dir + FileSys::SaveDataFactory::GetFullPath( + FileSys::SaveDataSpaceId::NandUser, + FileSys::SaveDataType::SaveData, program_id, user_id->uuid, 0); + } else { + // Device save data + path = nand_dir + FileSys::SaveDataFactory::GetFullPath( + FileSys::SaveDataSpaceId::NandUser, + FileSys::SaveDataType::SaveData, program_id, {}, 0); + } if (!FileUtil::Exists(path)) { FileUtil::CreateFullPath(path); |