Переглянути джерело

registered_cache: Fix missing reading from yuzu_meta

Zach Hilman 8 роки тому
батько
коміт
e5504a060d
1 змінених файлів з 16 додано та 7 видалено
  1. 16 7
      src/core/file_sys/registered_cache.cpp

+ 16 - 7
src/core/file_sys/registered_cache.cpp

@@ -129,14 +129,12 @@ VirtualFile RegisteredCache::GetFileAtID(NcaID id) const {
     return file;
     return file;
 }
 }
 
 
-boost::optional<NcaID> RegisteredCache::GetNcaIDFromMetadata(u64 title_id,
-                                                             ContentRecordType type) const {
-    if (type == ContentRecordType::Meta && meta_id.find(title_id) != meta_id.end())
-        return meta_id.at(title_id);
-    if (meta.find(title_id) == meta.end())
+static boost::optional<NcaID> CheckMapForContentRecord(
+    const boost::container::flat_map<u64, CNMT>& map, u64 title_id, ContentRecordType type) {
+    if (map.find(title_id) == map.end())
         return boost::none;
         return boost::none;
 
 
-    const auto& cnmt = meta.at(title_id);
+    const auto& cnmt = map.at(title_id);
 
 
     const auto iter = std::find_if(cnmt.GetContentRecords().begin(), cnmt.GetContentRecords().end(),
     const auto iter = std::find_if(cnmt.GetContentRecords().begin(), cnmt.GetContentRecords().end(),
                                    [type](const ContentRecord& rec) { return rec.type == type; });
                                    [type](const ContentRecord& rec) { return rec.type == type; });
@@ -146,6 +144,17 @@ boost::optional<NcaID> RegisteredCache::GetNcaIDFromMetadata(u64 title_id,
     return boost::make_optional(iter->nca_id);
     return boost::make_optional(iter->nca_id);
 }
 }
 
 
+boost::optional<NcaID> RegisteredCache::GetNcaIDFromMetadata(u64 title_id,
+                                                             ContentRecordType type) const {
+    if (type == ContentRecordType::Meta && meta_id.find(title_id) != meta_id.end())
+        return meta_id.at(title_id);
+
+    const auto res1 = CheckMapForContentRecord(yuzu_meta, title_id, type);
+    if (res1 != boost::none)
+        return res1;
+    return CheckMapForContentRecord(meta, title_id, type);
+}
+
 std::vector<NcaID> RegisteredCache::AccumulateFiles() const {
 std::vector<NcaID> RegisteredCache::AccumulateFiles() const {
     std::vector<NcaID> ids;
     std::vector<NcaID> ids;
     for (const auto& d2_dir : dir->GetSubdirectories()) {
     for (const auto& d2_dir : dir->GetSubdirectories()) {
@@ -398,7 +407,7 @@ bool RegisteredCache::RawInstallNCA(std::shared_ptr<NCA> nca, boost::optional<Nc
     std::string path = GetRelativePathFromNcaID(id, false, true);
     std::string path = GetRelativePathFromNcaID(id, false, true);
 
 
     if (GetFileAtID(id) != nullptr) {
     if (GetFileAtID(id) != nullptr) {
-        LOG_WARNING(Loader, "OW Attempt");
+        LOG_WARNING(Loader, "Attempting to overwrite existing NCA. Skipping...");
         return false;
         return false;
     }
     }