diff options
| author | Zach Hilman <zachhilman@gmail.com> | 2018-08-28 22:38:19 -0400 | 
|---|---|---|
| committer | Zach Hilman <zachhilman@gmail.com> | 2018-09-04 16:24:02 -0400 | 
| commit | 2814ca362494c3d3af90abab8a66db5eb2db56f6 (patch) | |
| tree | 708b7d30356d988e85be9033a1c0dc7758102a20 | |
| parent | a6e75cd45b75a202eed1a68692e33e7732789dd2 (diff) | |
game_list: Use friendly game versions
Mainly, from control.nacp metadata instead of cnmt metadata
| -rw-r--r-- | src/yuzu/game_list.cpp | 45 | 
1 files changed, 32 insertions, 13 deletions
diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp index 1aec08cdb..02d8a3882 100644 --- a/src/yuzu/game_list.cpp +++ b/src/yuzu/game_list.cpp @@ -456,8 +456,9 @@ static QString FormatGameName(const std::string& physical_name) {      return physical_name_as_qstring;  } -static QString FormatPatchNameVersions(u64 title_id, bool updatable = true) { -    const FileSys::PatchManager patch_manager(title_id); +static QString FormatPatchNameVersions(const FileSys::PatchManager& patch_manager, +                                       std::string update_version_override = "", +                                       bool updatable = true) {      QString out;      for (const auto& kv : patch_manager.GetPatchVersionNames()) {          if (!updatable && kv.first == FileSys::PatchType::Update) @@ -466,9 +467,13 @@ static QString FormatPatchNameVersions(u64 title_id, bool updatable = true) {          if (kv.second == 0) {              out.append(fmt::format("{}\n", FileSys::FormatPatchTypeName(kv.first)).c_str());          } else { -            out.append(fmt::format("{} ({})\n", FileSys::FormatPatchTypeName(kv.first), -                                   FileSys::FormatTitleVersion(kv.second)) -                           .c_str()); +            auto version_data = FileSys::FormatTitleVersion(kv.second); +            if (kv.first == FileSys::PatchType::Update && !update_version_override.empty()) +                version_data = update_version_override; + +            out.append( +                fmt::format("{} ({})\n", FileSys::FormatPatchTypeName(kv.first), version_data) +                    .c_str());          }      } @@ -484,9 +489,16 @@ void GameList::RefreshGameDirectory() {      }  } -static void GetMetadataFromControlNCA(const std::shared_ptr<FileSys::NCA>& nca, -                                      std::vector<u8>& icon, std::string& name) { -    const auto control_dir = FileSys::ExtractRomFS(nca->GetRomFS()); +static void GetMetadataFromControlNCA(const FileSys::PatchManager& patch_manager, +                                      const std::shared_ptr<FileSys::NCA>& nca, +                                      std::vector<u8>& icon, std::string& name, +                                      std::string& version) { +    const auto romfs = patch_manager.PatchRomFS(nca->GetRomFS(), nca->GetBaseIVFCOffset(), +                                                FileSys::ContentRecordType::Control); +    if (romfs == nullptr) +        return; + +    const auto control_dir = FileSys::ExtractRomFS(romfs);      if (control_dir == nullptr)          return; @@ -495,6 +507,7 @@ static void GetMetadataFromControlNCA(const std::shared_ptr<FileSys::NCA>& nca,          return;      FileSys::NACP nacp(nacp_file);      name = nacp.GetApplicationName(); +    version = nacp.GetVersionString();      FileSys::VirtualFile icon_file = nullptr;      for (const auto& language : FileSys::LANGUAGE_NAMES) { @@ -526,18 +539,20 @@ void GameListWorker::AddInstalledTitlesToGameList(std::shared_ptr<FileSys::Regis          std::vector<u8> icon;          std::string name; +        std::string version = "";          u64 program_id = 0;          loader->ReadProgramId(program_id); +        const FileSys::PatchManager patch{program_id};          const auto& control = cache->GetEntry(game.title_id, FileSys::ContentRecordType::Control);          if (control != nullptr) -            GetMetadataFromControlNCA(control, icon, name); +            GetMetadataFromControlNCA(patch, control, icon, name, version);          emit EntryReady({              new GameListItemPath(                  FormatGameName(file->GetFullPath()), icon, QString::fromStdString(name),                  QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType())),                  program_id), -            new GameListItem(FormatPatchNameVersions(program_id)), +            new GameListItem(FormatPatchNameVersions(patch, version)),              new GameListItem(                  QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))),              new GameListItemSize(file->GetSize()), @@ -603,12 +618,16 @@ void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsign              std::string name = " ";              const auto res3 = loader->ReadTitle(name); +            const FileSys::PatchManager patch{program_id}; + +            std::string version = ""; +              if (res1 != Loader::ResultStatus::Success && res3 != Loader::ResultStatus::Success &&                  res2 == Loader::ResultStatus::Success) {                  // Use from metadata pool.                  if (nca_control_map.find(program_id) != nca_control_map.end()) {                      const auto nca = nca_control_map[program_id]; -                    GetMetadataFromControlNCA(nca, icon, name); +                    GetMetadataFromControlNCA(patch, nca, icon, name, version);                  }              } @@ -619,8 +638,6 @@ void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsign              if (it != compatibility_list.end())                  compatibility = it->second.first; -            FileSys::PatchManager patch{program_id}; -              emit EntryReady({                  new GameListItemPath(                      FormatGameName(physical_name), icon, QString::fromStdString(name), @@ -629,6 +646,8 @@ void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsign                  new GameListItemCompat(compatibility),                  new GameListItem(FormatPatchNameVersions(program_id, loader->IsRomFSUpdatable())),                  new GameListItem( +                    FormatPatchNameVersions(patch, version, loader->IsRomFSUpdatable())), +                new GameListItem(                      QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))),                  new GameListItemSize(FileUtil::GetSize(physical_name)),              });  | 
