implement blocks data conversion

This commit is contained in:
MihailRis
2024-10-01 19:08:45 +03:00
parent 28d746f371
commit bc05716772
16 changed files with 341 additions and 23 deletions
+30 -1
View File
@@ -56,11 +56,40 @@ std::shared_ptr<ContentReport> ContentReport::create(
indices, blocks_c, items_c, regionsVersion);
report->blocks.setup(blocklist, content->blocks);
report->items.setup(itemlist, content->items);
for (const auto& [name, map] : root["blocks-data"].asObject()) {
data::StructLayout layout;
layout.deserialize(map);
auto def = content->blocks.find(name);
if (def == nullptr) {
continue;
}
if (def->dataStruct == nullptr) {
ContentIssue issue {ContentIssueType::BLOCK_DATA_LAYOUTS_UPDATE};
report->issues.push_back(issue);
report->dataLoss.push_back(name+": discard data");
continue;
}
auto incapatibility = layout.checkCompatibility(*def->dataStruct);
if (!incapatibility.empty()) {
ContentIssue issue {ContentIssueType::BLOCK_DATA_LAYOUTS_UPDATE};
report->issues.push_back(issue);
for (const auto& error : incapatibility) {
report->dataLoss.push_back(
"[" + name + "] field " + error.name + " - " +
data::to_string(error.type)
);
}
}
report->blocksDataLayouts[name] = std::move(layout);
}
report->buildIssues();
if (report->isUpgradeRequired() ||
report->hasContentReorder() ||
report->hasMissingContent()) {
report->hasMissingContent() ||
report->hasDataLoss()) {
return report;
} else {
return nullptr;