Merge pull request #1464 from lioncash/unique
patch_manager: Return a std::unique_ptr from ParseControlNCA() and GetControlMetadata() instead of a std::shared_ptr
This commit is contained in:
commit
3ac874c32e
|
@ -345,23 +345,22 @@ std::map<std::string, std::string, std::less<>> PatchManager::GetPatchVersionNam
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::shared_ptr<NACP>, VirtualFile> PatchManager::GetControlMetadata() const {
|
std::pair<std::unique_ptr<NACP>, VirtualFile> PatchManager::GetControlMetadata() const {
|
||||||
const auto& installed{Service::FileSystem::GetUnionContents()};
|
const auto& installed{Service::FileSystem::GetUnionContents()};
|
||||||
|
|
||||||
const auto base_control_nca = installed->GetEntry(title_id, ContentRecordType::Control);
|
const auto base_control_nca = installed->GetEntry(title_id, ContentRecordType::Control);
|
||||||
if (base_control_nca == nullptr)
|
if (base_control_nca == nullptr)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
return ParseControlNCA(base_control_nca);
|
return ParseControlNCA(*base_control_nca);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::shared_ptr<NACP>, VirtualFile> PatchManager::ParseControlNCA(
|
std::pair<std::unique_ptr<NACP>, VirtualFile> PatchManager::ParseControlNCA(const NCA& nca) const {
|
||||||
const std::shared_ptr<NCA>& nca) const {
|
const auto base_romfs = nca.GetRomFS();
|
||||||
const auto base_romfs = nca->GetRomFS();
|
|
||||||
if (base_romfs == nullptr)
|
if (base_romfs == nullptr)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const auto romfs = PatchRomFS(base_romfs, nca->GetBaseIVFCOffset(), ContentRecordType::Control);
|
const auto romfs = PatchRomFS(base_romfs, nca.GetBaseIVFCOffset(), ContentRecordType::Control);
|
||||||
if (romfs == nullptr)
|
if (romfs == nullptr)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
@ -373,7 +372,7 @@ std::pair<std::shared_ptr<NACP>, VirtualFile> PatchManager::ParseControlNCA(
|
||||||
if (nacp_file == nullptr)
|
if (nacp_file == nullptr)
|
||||||
nacp_file = extracted->GetFile("Control.nacp");
|
nacp_file = extracted->GetFile("Control.nacp");
|
||||||
|
|
||||||
const auto nacp = nacp_file == nullptr ? nullptr : std::make_shared<NACP>(nacp_file);
|
auto nacp = nacp_file == nullptr ? nullptr : std::make_unique<NACP>(nacp_file);
|
||||||
|
|
||||||
VirtualFile icon_file;
|
VirtualFile icon_file;
|
||||||
for (const auto& language : FileSys::LANGUAGE_NAMES) {
|
for (const auto& language : FileSys::LANGUAGE_NAMES) {
|
||||||
|
@ -382,6 +381,6 @@ std::pair<std::shared_ptr<NACP>, VirtualFile> PatchManager::ParseControlNCA(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {nacp, icon_file};
|
return {std::move(nacp), icon_file};
|
||||||
}
|
}
|
||||||
} // namespace FileSys
|
} // namespace FileSys
|
||||||
|
|
|
@ -57,11 +57,10 @@ public:
|
||||||
|
|
||||||
// Given title_id of the program, attempts to get the control data of the update and parse it,
|
// Given title_id of the program, attempts to get the control data of the update and parse it,
|
||||||
// falling back to the base control data.
|
// falling back to the base control data.
|
||||||
std::pair<std::shared_ptr<NACP>, VirtualFile> GetControlMetadata() const;
|
std::pair<std::unique_ptr<NACP>, VirtualFile> GetControlMetadata() const;
|
||||||
|
|
||||||
// Version of GetControlMetadata that takes an arbitrary NCA
|
// Version of GetControlMetadata that takes an arbitrary NCA
|
||||||
std::pair<std::shared_ptr<NACP>, VirtualFile> ParseControlNCA(
|
std::pair<std::unique_ptr<NACP>, VirtualFile> ParseControlNCA(const NCA& nca) const;
|
||||||
const std::shared_ptr<NCA>& nca) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u64 title_id;
|
u64 title_id;
|
||||||
|
|
|
@ -35,7 +35,7 @@ AppLoader_NSP::AppLoader_NSP(FileSys::VirtualFile file)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::tie(nacp_file, icon_file) =
|
std::tie(nacp_file, icon_file) =
|
||||||
FileSys::PatchManager(nsp->GetProgramTitleID()).ParseControlNCA(control_nca);
|
FileSys::PatchManager(nsp->GetProgramTitleID()).ParseControlNCA(*control_nca);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppLoader_NSP::~AppLoader_NSP() = default;
|
AppLoader_NSP::~AppLoader_NSP() = default;
|
||||||
|
|
|
@ -49,7 +49,7 @@ private:
|
||||||
std::unique_ptr<AppLoader> secondary_loader;
|
std::unique_ptr<AppLoader> secondary_loader;
|
||||||
|
|
||||||
FileSys::VirtualFile icon_file;
|
FileSys::VirtualFile icon_file;
|
||||||
std::shared_ptr<FileSys::NACP> nacp_file;
|
std::unique_ptr<FileSys::NACP> nacp_file;
|
||||||
u64 title_id;
|
u64 title_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ AppLoader_XCI::AppLoader_XCI(FileSys::VirtualFile file)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::tie(nacp_file, icon_file) =
|
std::tie(nacp_file, icon_file) =
|
||||||
FileSys::PatchManager(xci->GetProgramTitleID()).ParseControlNCA(control_nca);
|
FileSys::PatchManager(xci->GetProgramTitleID()).ParseControlNCA(*control_nca);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppLoader_XCI::~AppLoader_XCI() = default;
|
AppLoader_XCI::~AppLoader_XCI() = default;
|
||||||
|
|
|
@ -49,7 +49,7 @@ private:
|
||||||
std::unique_ptr<AppLoader_NCA> nca_loader;
|
std::unique_ptr<AppLoader_NCA> nca_loader;
|
||||||
|
|
||||||
FileSys::VirtualFile icon_file;
|
FileSys::VirtualFile icon_file;
|
||||||
std::shared_ptr<FileSys::NACP> nacp_file;
|
std::unique_ptr<FileSys::NACP> nacp_file;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Loader
|
} // namespace Loader
|
||||||
|
|
|
@ -27,9 +27,8 @@
|
||||||
#include "yuzu/ui_settings.h"
|
#include "yuzu/ui_settings.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
void GetMetadataFromControlNCA(const FileSys::PatchManager& patch_manager,
|
void GetMetadataFromControlNCA(const FileSys::PatchManager& patch_manager, const FileSys::NCA& nca,
|
||||||
const std::shared_ptr<FileSys::NCA>& nca, std::vector<u8>& icon,
|
std::vector<u8>& icon, std::string& name) {
|
||||||
std::string& name) {
|
|
||||||
auto [nacp, icon_file] = patch_manager.ParseControlNCA(nca);
|
auto [nacp, icon_file] = patch_manager.ParseControlNCA(nca);
|
||||||
if (icon_file != nullptr)
|
if (icon_file != nullptr)
|
||||||
icon = icon_file->ReadAllBytes();
|
icon = icon_file->ReadAllBytes();
|
||||||
|
@ -110,7 +109,7 @@ void GameListWorker::AddInstalledTitlesToGameList() {
|
||||||
const FileSys::PatchManager patch{program_id};
|
const FileSys::PatchManager patch{program_id};
|
||||||
const auto& control = cache->GetEntry(game.title_id, FileSys::ContentRecordType::Control);
|
const auto& control = cache->GetEntry(game.title_id, FileSys::ContentRecordType::Control);
|
||||||
if (control != nullptr)
|
if (control != nullptr)
|
||||||
GetMetadataFromControlNCA(patch, control, icon, name);
|
GetMetadataFromControlNCA(patch, *control, icon, name);
|
||||||
|
|
||||||
auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id);
|
auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id);
|
||||||
|
|
||||||
|
@ -197,8 +196,8 @@ void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsign
|
||||||
res2 == Loader::ResultStatus::Success) {
|
res2 == Loader::ResultStatus::Success) {
|
||||||
// Use from metadata pool.
|
// Use from metadata pool.
|
||||||
if (nca_control_map.find(program_id) != nca_control_map.end()) {
|
if (nca_control_map.find(program_id) != nca_control_map.end()) {
|
||||||
const auto nca = nca_control_map[program_id];
|
const auto& nca = nca_control_map[program_id];
|
||||||
GetMetadataFromControlNCA(patch, nca, icon, name);
|
GetMetadataFromControlNCA(patch, *nca, icon, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue