summaryrefslogtreecommitdiff
path: root/view/sharedcache/core/SharedCache.cpp
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-02-19 23:17:55 -0500
committerMason Reed <mason@vector35.com>2025-04-02 05:36:54 -0400
commitad337df11a3939dea833fc39d7ee555a427b9d09 (patch)
treef393f670f428eb6f2f621eeb3dc630caca62fdaf /view/sharedcache/core/SharedCache.cpp
parent0d228d32f6087ea95d5de5235dd25aa6eeb7f406 (diff)
[SharedCache] Warn when loading BNDB with different shared cache metadata version
This does not actually give the user control to exit early, that looks to need core changes.
Diffstat (limited to 'view/sharedcache/core/SharedCache.cpp')
-rw-r--r--view/sharedcache/core/SharedCache.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/view/sharedcache/core/SharedCache.cpp b/view/sharedcache/core/SharedCache.cpp
index 9e578384..a9d8a70b 100644
--- a/view/sharedcache/core/SharedCache.cpp
+++ b/view/sharedcache/core/SharedCache.cpp
@@ -3594,6 +3594,21 @@ bool SharedCacheMetadata::ViewHasMetadata(BinaryView* view)
return view->QueryMetadata(Tag);
}
+std::optional<unsigned int> SharedCacheMetadata::ViewMetadataVersion(BinaryView* view)
+{
+ // Whether the view has compatible metadata. I.e. if the version differs.
+ Ref<Metadata> viewMetadata = view->QueryMetadata(Tag);
+ if (!viewMetadata)
+ return std::nullopt;
+ DeserializationContext context;
+ rapidjson::ParseResult result = context.doc.Parse(viewMetadata->GetString().c_str());
+ if (!result)
+ return std::nullopt;
+ if (!context.doc.HasMember("metadataVersion"))
+ return std::nullopt;
+ return context.doc["metadataVersion"].GetUint();
+}
+
// static
std::optional<SharedCacheMetadata> SharedCacheMetadata::LoadFromView(BinaryView* view)
{