|
@@ -86,6 +86,35 @@ QString FormatPatchNameVersions(const FileSys::PatchManager& patch_manager,
|
|
|
out.chop(1);
|
|
out.chop(1);
|
|
|
return out;
|
|
return out;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+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 FileSys::PatchManager& patch) {
|
|
|
|
|
+ const auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id);
|
|
|
|
|
+
|
|
|
|
|
+ // The game list uses this as compatibility number for untested games
|
|
|
|
|
+ QString compatibility{"99"};
|
|
|
|
|
+ if (it != compatibility_list.end()) {
|
|
|
|
|
+ compatibility = it->second.first;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ QList<QStandardItem*> list{
|
|
|
|
|
+ new GameListItemPath(
|
|
|
|
|
+ FormatGameName(path), icon, QString::fromStdString(name),
|
|
|
|
|
+ QString::fromStdString(Loader::GetFileTypeString(loader.GetFileType())), program_id),
|
|
|
|
|
+ new GameListItemCompat(compatibility),
|
|
|
|
|
+ new GameListItem(QString::fromStdString(Loader::GetFileTypeString(loader.GetFileType()))),
|
|
|
|
|
+ new GameListItemSize(FileUtil::GetSize(path)),
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ if (UISettings::values.show_add_ons) {
|
|
|
|
|
+ list.insert(
|
|
|
|
|
+ 2, new GameListItem(FormatPatchNameVersions(patch, loader, loader.IsRomFSUpdatable())));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return list;
|
|
|
|
|
+}
|
|
|
} // Anonymous namespace
|
|
} // Anonymous namespace
|
|
|
|
|
|
|
|
GameListWorker::GameListWorker(FileSys::VirtualFilesystem vfs, QString dir_path, bool deep_scan,
|
|
GameListWorker::GameListWorker(FileSys::VirtualFilesystem vfs, QString dir_path, bool deep_scan,
|
|
@@ -116,29 +145,8 @@ void GameListWorker::AddInstalledTitlesToGameList() {
|
|
|
if (control != nullptr)
|
|
if (control != nullptr)
|
|
|
GetMetadataFromControlNCA(patch, *control, icon, name);
|
|
GetMetadataFromControlNCA(patch, *control, icon, name);
|
|
|
|
|
|
|
|
- auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id);
|
|
|
|
|
-
|
|
|
|
|
- // The game list uses this as compatibility number for untested games
|
|
|
|
|
- QString compatibility("99");
|
|
|
|
|
- if (it != compatibility_list.end())
|
|
|
|
|
- compatibility = it->second.first;
|
|
|
|
|
-
|
|
|
|
|
- QList<QStandardItem*> list{
|
|
|
|
|
- new GameListItemPath(
|
|
|
|
|
- FormatGameName(file->GetFullPath()), icon, QString::fromStdString(name),
|
|
|
|
|
- QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType())),
|
|
|
|
|
- program_id),
|
|
|
|
|
- new GameListItemCompat(compatibility),
|
|
|
|
|
- new GameListItem(
|
|
|
|
|
- QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))),
|
|
|
|
|
- new GameListItemSize(file->GetSize()),
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- if (UISettings::values.show_add_ons) {
|
|
|
|
|
- list.insert(2, new GameListItem(FormatPatchNameVersions(patch, *loader)));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- emit EntryReady(list);
|
|
|
|
|
|
|
+ emit EntryReady(MakeGameListEntry(file->GetFullPath(), name, icon, *loader, program_id,
|
|
|
|
|
+ compatibility_list, patch));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const auto control_data = cache.ListEntriesFilter(FileSys::TitleType::Application,
|
|
const auto control_data = cache.ListEntriesFilter(FileSys::TitleType::Application,
|
|
@@ -155,14 +163,14 @@ void GameListWorker::AddInstalledTitlesToGameList() {
|
|
|
void GameListWorker::FillControlMap(const std::string& dir_path) {
|
|
void GameListWorker::FillControlMap(const std::string& dir_path) {
|
|
|
const auto nca_control_callback = [this](u64* num_entries_out, const std::string& directory,
|
|
const auto nca_control_callback = [this](u64* num_entries_out, const std::string& directory,
|
|
|
const std::string& virtual_name) -> bool {
|
|
const std::string& virtual_name) -> bool {
|
|
|
- std::string physical_name = directory + DIR_SEP + virtual_name;
|
|
|
|
|
-
|
|
|
|
|
- if (stop_processing)
|
|
|
|
|
- return false; // Breaks the callback loop.
|
|
|
|
|
|
|
+ if (stop_processing) {
|
|
|
|
|
+ // Breaks the callback loop
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- bool is_dir = FileUtil::IsDirectory(physical_name);
|
|
|
|
|
- QFileInfo file_info(physical_name.c_str());
|
|
|
|
|
- if (!is_dir && file_info.suffix().toStdString() == "nca") {
|
|
|
|
|
|
|
+ const std::string physical_name = directory + DIR_SEP + virtual_name;
|
|
|
|
|
+ const QFileInfo file_info(QString::fromStdString(physical_name));
|
|
|
|
|
+ if (!file_info.isDir() && file_info.suffix() == QStringLiteral("nca")) {
|
|
|
auto nca =
|
|
auto nca =
|
|
|
std::make_unique<FileSys::NCA>(vfs->OpenFile(physical_name, FileSys::Mode::Read));
|
|
std::make_unique<FileSys::NCA>(vfs->OpenFile(physical_name, FileSys::Mode::Read));
|
|
|
if (nca->GetType() == FileSys::NCAContentType::Control) {
|
|
if (nca->GetType() == FileSys::NCAContentType::Control) {
|
|
@@ -179,12 +187,13 @@ void GameListWorker::FillControlMap(const std::string& dir_path) {
|
|
|
void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion) {
|
|
void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion) {
|
|
|
const auto callback = [this, recursion](u64* num_entries_out, const std::string& directory,
|
|
const auto callback = [this, recursion](u64* num_entries_out, const std::string& directory,
|
|
|
const std::string& virtual_name) -> bool {
|
|
const std::string& virtual_name) -> bool {
|
|
|
- std::string physical_name = directory + DIR_SEP + virtual_name;
|
|
|
|
|
-
|
|
|
|
|
- if (stop_processing)
|
|
|
|
|
- return false; // Breaks the callback loop.
|
|
|
|
|
|
|
+ if (stop_processing) {
|
|
|
|
|
+ // Breaks the callback loop.
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- bool is_dir = FileUtil::IsDirectory(physical_name);
|
|
|
|
|
|
|
+ const std::string physical_name = directory + DIR_SEP + virtual_name;
|
|
|
|
|
+ const bool is_dir = FileUtil::IsDirectory(physical_name);
|
|
|
if (!is_dir &&
|
|
if (!is_dir &&
|
|
|
(HasSupportedFileExtension(physical_name) || IsExtractedNCAMain(physical_name))) {
|
|
(HasSupportedFileExtension(physical_name) || IsExtractedNCAMain(physical_name))) {
|
|
|
std::unique_ptr<Loader::AppLoader> loader =
|
|
std::unique_ptr<Loader::AppLoader> loader =
|
|
@@ -214,30 +223,8 @@ void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsign
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id);
|
|
|
|
|
-
|
|
|
|
|
- // The game list uses this as compatibility number for untested games
|
|
|
|
|
- QString compatibility("99");
|
|
|
|
|
- if (it != compatibility_list.end())
|
|
|
|
|
- compatibility = it->second.first;
|
|
|
|
|
-
|
|
|
|
|
- QList<QStandardItem*> list{
|
|
|
|
|
- new GameListItemPath(
|
|
|
|
|
- FormatGameName(physical_name), icon, QString::fromStdString(name),
|
|
|
|
|
- QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType())),
|
|
|
|
|
- program_id),
|
|
|
|
|
- new GameListItemCompat(compatibility),
|
|
|
|
|
- new GameListItem(
|
|
|
|
|
- QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))),
|
|
|
|
|
- new GameListItemSize(FileUtil::GetSize(physical_name)),
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- if (UISettings::values.show_add_ons) {
|
|
|
|
|
- list.insert(2, new GameListItem(FormatPatchNameVersions(
|
|
|
|
|
- patch, *loader, loader->IsRomFSUpdatable())));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- emit EntryReady(std::move(list));
|
|
|
|
|
|
|
+ emit EntryReady(MakeGameListEntry(physical_name, name, icon, *loader, program_id,
|
|
|
|
|
+ compatibility_list, patch));
|
|
|
} else if (is_dir && recursion > 0) {
|
|
} else if (is_dir && recursion > 0) {
|
|
|
watch_list.append(QString::fromStdString(physical_name));
|
|
watch_list.append(QString::fromStdString(physical_name));
|
|
|
AddFstEntriesToGameList(physical_name, recursion - 1);
|
|
AddFstEntriesToGameList(physical_name, recursion - 1);
|