diff options
Diffstat (limited to 'src/yuzu')
-rw-r--r-- | src/yuzu/configuration/shared_widget.cpp | 1 | ||||
-rw-r--r-- | src/yuzu/game_list_worker.cpp | 23 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 38 | ||||
-rw-r--r-- | src/yuzu/main.h | 1 |
4 files changed, 53 insertions, 10 deletions
diff --git a/src/yuzu/configuration/shared_widget.cpp b/src/yuzu/configuration/shared_widget.cpp index 36d8da5a5..7721e58f9 100644 --- a/src/yuzu/configuration/shared_widget.cpp +++ b/src/yuzu/configuration/shared_widget.cpp @@ -295,6 +295,7 @@ QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& gi slider->setValue(std::stoi(setting.ToString())); slider->setInvertedAppearance(reversed); + slider->setInvertedControls(reversed); serializer = [this]() { return std::to_string(slider->value()); }; restore_func = [this]() { slider->setValue(std::stoi(RelevantDefault(setting))); }; diff --git a/src/yuzu/game_list_worker.cpp b/src/yuzu/game_list_worker.cpp index 9404365b4..e7fb8a282 100644 --- a/src/yuzu/game_list_worker.cpp +++ b/src/yuzu/game_list_worker.cpp @@ -191,8 +191,9 @@ QString FormatPatchNameVersions(const FileSys::PatchManager& patch_manager, } QList<QStandardItem*> MakeGameListEntry(const std::string& path, const std::string& name, - const std::vector<u8>& icon, Loader::AppLoader& loader, - u64 program_id, const CompatibilityList& compatibility_list, + const std::size_t size, const std::vector<u8>& icon, + Loader::AppLoader& loader, u64 program_id, + const CompatibilityList& compatibility_list, const FileSys::PatchManager& patch) { const auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); @@ -210,7 +211,7 @@ QList<QStandardItem*> MakeGameListEntry(const std::string& path, const std::stri file_type_string, program_id), new GameListItemCompat(compatibility), new GameListItem(file_type_string), - new GameListItemSize(Common::FS::GetSize(path)), + new GameListItemSize(size), }; const auto patch_versions = GetGameListCachedObject( @@ -278,8 +279,8 @@ void GameListWorker::AddTitlesToGameList(GameListDir* parent_dir) { GetMetadataFromControlNCA(patch, *control, icon, name); } - emit EntryReady(MakeGameListEntry(file->GetFullPath(), name, icon, *loader, program_id, - compatibility_list, patch), + emit EntryReady(MakeGameListEntry(file->GetFullPath(), name, file->GetSize(), icon, *loader, + program_id, compatibility_list, patch), parent_dir); } } @@ -354,8 +355,9 @@ void GameListWorker::ScanFileSystem(ScanTarget target, const std::string& dir_pa const FileSys::PatchManager patch{id, system.GetFileSystemController(), system.GetContentProvider()}; - emit EntryReady(MakeGameListEntry(physical_name, name, icon, *loader, id, - compatibility_list, patch), + emit EntryReady(MakeGameListEntry(physical_name, name, + Common::FS::GetSize(physical_name), icon, + *loader, id, compatibility_list, patch), parent_dir); } } else { @@ -368,9 +370,10 @@ void GameListWorker::ScanFileSystem(ScanTarget target, const std::string& dir_pa const FileSys::PatchManager patch{program_id, system.GetFileSystemController(), system.GetContentProvider()}; - emit EntryReady(MakeGameListEntry(physical_name, name, icon, *loader, - program_id, compatibility_list, patch), - parent_dir); + emit EntryReady( + MakeGameListEntry(physical_name, name, Common::FS::GetSize(physical_name), + icon, *loader, program_id, compatibility_list, patch), + parent_dir); } } } else if (is_dir) { diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 99961ca3e..33c9fd0af 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1811,6 +1811,43 @@ bool GMainWindow::SelectAndSetCurrentUser( return true; } +void GMainWindow::ConfigureFilesystemProvider(const std::string& filepath) { + // Ensure all NCAs are registered before launching the game + const auto file = vfs->OpenFile(filepath, FileSys::Mode::Read); + if (!file) { + return; + } + + auto loader = Loader::GetLoader(*system, file); + if (!loader) { + return; + } + + const auto file_type = loader->GetFileType(); + if (file_type == Loader::FileType::Unknown || file_type == Loader::FileType::Error) { + return; + } + + u64 program_id = 0; + const auto res2 = loader->ReadProgramId(program_id); + if (res2 == Loader::ResultStatus::Success && file_type == Loader::FileType::NCA) { + provider->AddEntry(FileSys::TitleType::Application, + FileSys::GetCRTypeFromNCAType(FileSys::NCA{file}.GetType()), program_id, + file); + } else if (res2 == Loader::ResultStatus::Success && + (file_type == Loader::FileType::XCI || file_type == Loader::FileType::NSP)) { + const auto nsp = file_type == Loader::FileType::NSP + ? std::make_shared<FileSys::NSP>(file) + : FileSys::XCI{file}.GetSecurePartitionNSP(); + for (const auto& title : nsp->GetNCAs()) { + for (const auto& entry : title.second) { + provider->AddEntry(entry.first.first, entry.first.second, title.first, + entry.second->GetBaseFile()); + } + } + } +} + void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t program_index, StartGameType type) { LOG_INFO(Frontend, "yuzu starting..."); @@ -1825,6 +1862,7 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t last_filename_booted = filename; + ConfigureFilesystemProvider(filename.toStdString()); const auto v_file = Core::GetGameFileFromPath(vfs, filename.toUtf8().constData()); const auto loader = Loader::GetLoader(*system, v_file, program_id, program_index); diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 2cfb96257..1b7055122 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -399,6 +399,7 @@ private: void OpenPerGameConfiguration(u64 title_id, const std::string& file_name); bool CheckDarkMode(); bool CheckSystemArchiveDecryption(); + void ConfigureFilesystemProvider(const std::string& filepath); QString GetTasStateDescription() const; bool CreateShortcut(const std::string& shortcut_path, const std::string& title, |