|
|
|
@ -75,12 +75,12 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const { |
|
|
|
|
|
|
|
// Game Updates
|
|
|
|
const auto update_tid = GetUpdateTitleID(title_id); |
|
|
|
const auto update = installed->GetEntry(update_tid, ContentRecordType::Program); |
|
|
|
const auto update = installed.GetEntry(update_tid, ContentRecordType::Program); |
|
|
|
|
|
|
|
if (update != nullptr && update->GetExeFS() != nullptr && |
|
|
|
update->GetStatus() == Loader::ResultStatus::ErrorMissingBKTRBaseRomFS) { |
|
|
|
LOG_INFO(Loader, " ExeFS: Update ({}) applied successfully", |
|
|
|
FormatTitleVersion(installed->GetEntryVersion(update_tid).value_or(0))); |
|
|
|
FormatTitleVersion(installed.GetEntryVersion(update_tid).value_or(0))); |
|
|
|
exefs = update->GetExeFS(); |
|
|
|
} |
|
|
|
|
|
|
|
@ -281,13 +281,13 @@ VirtualFile PatchManager::PatchRomFS(VirtualFile romfs, u64 ivfc_offset, Content |
|
|
|
|
|
|
|
// Game Updates
|
|
|
|
const auto update_tid = GetUpdateTitleID(title_id); |
|
|
|
const auto update = installed->GetEntryRaw(update_tid, type); |
|
|
|
const auto update = installed.GetEntryRaw(update_tid, type); |
|
|
|
if (update != nullptr) { |
|
|
|
const auto new_nca = std::make_shared<NCA>(update, romfs, ivfc_offset); |
|
|
|
if (new_nca->GetStatus() == Loader::ResultStatus::Success && |
|
|
|
new_nca->GetRomFS() != nullptr) { |
|
|
|
LOG_INFO(Loader, " RomFS: Update ({}) applied successfully", |
|
|
|
FormatTitleVersion(installed->GetEntryVersion(update_tid).value_or(0))); |
|
|
|
FormatTitleVersion(installed.GetEntryVersion(update_tid).value_or(0))); |
|
|
|
romfs = new_nca->GetRomFS(); |
|
|
|
} |
|
|
|
} else if (update_raw != nullptr) { |
|
|
|
@ -329,8 +329,8 @@ std::map<std::string, std::string, std::less<>> PatchManager::GetPatchVersionNam |
|
|
|
if (nacp != nullptr) { |
|
|
|
out.insert_or_assign("Update", nacp->GetVersionString()); |
|
|
|
} else { |
|
|
|
if (installed->HasEntry(update_tid, ContentRecordType::Program)) { |
|
|
|
const auto meta_ver = installed->GetEntryVersion(update_tid); |
|
|
|
if (installed.HasEntry(update_tid, ContentRecordType::Program)) { |
|
|
|
const auto meta_ver = installed.GetEntryVersion(update_tid); |
|
|
|
if (meta_ver.value_or(0) == 0) { |
|
|
|
out.insert_or_assign("Update", ""); |
|
|
|
} else { |
|
|
|
@ -383,14 +383,13 @@ std::map<std::string, std::string, std::less<>> PatchManager::GetPatchVersionNam |
|
|
|
} |
|
|
|
|
|
|
|
// DLC
|
|
|
|
const auto dlc_entries = installed->ListEntriesFilter(TitleType::AOC, ContentRecordType::Data); |
|
|
|
const auto dlc_entries = installed.ListEntriesFilter(TitleType::AOC, ContentRecordType::Data); |
|
|
|
std::vector<RegisteredCacheEntry> dlc_match; |
|
|
|
dlc_match.reserve(dlc_entries.size()); |
|
|
|
std::copy_if(dlc_entries.begin(), dlc_entries.end(), std::back_inserter(dlc_match), |
|
|
|
[this, &installed](const RegisteredCacheEntry& entry) { |
|
|
|
return (entry.title_id & DLC_BASE_TITLE_ID_MASK) == title_id && |
|
|
|
installed->GetEntry(entry)->GetStatus() == |
|
|
|
Loader::ResultStatus::Success; |
|
|
|
installed.GetEntry(entry)->GetStatus() == Loader::ResultStatus::Success; |
|
|
|
}); |
|
|
|
if (!dlc_match.empty()) { |
|
|
|
// Ensure sorted so DLC IDs show in order.
|
|
|
|
@ -411,7 +410,7 @@ std::map<std::string, std::string, std::less<>> PatchManager::GetPatchVersionNam |
|
|
|
std::pair<std::unique_ptr<NACP>, VirtualFile> PatchManager::GetControlMetadata() const { |
|
|
|
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) |
|
|
|
return {}; |
|
|
|
|
|
|
|
|