mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-29 17:32:17 -07:00
[Card Database] Improve loading times through binary cache
Took 10 minutes Took 9 minutes Took 16 seconds
This commit is contained in:
parent
688c5d2a12
commit
1057d2eb3b
30 changed files with 1434 additions and 90 deletions
|
|
@ -82,6 +82,13 @@ void CockatriceXml4Parser::parseFile(QIODevice &device)
|
|||
}
|
||||
}
|
||||
|
||||
void CockatriceXml4Parser::parseFileInto(QIODevice &device, CardDatabaseData &data)
|
||||
{
|
||||
targetData = &data;
|
||||
parseFile(device);
|
||||
targetData = nullptr;
|
||||
}
|
||||
|
||||
static QSharedPointer<FormatRules> parseFormat(QXmlStreamReader &xml)
|
||||
{
|
||||
auto rulesPtr = FormatRulesPtr(new FormatRules());
|
||||
|
|
@ -187,7 +194,11 @@ void CockatriceXml4Parser::loadFormats(QXmlStreamReader &xml)
|
|||
|
||||
if (xml.name().toString() == "format") {
|
||||
auto rulesPtr = parseFormat(xml);
|
||||
emit addFormat(rulesPtr);
|
||||
if (targetData) {
|
||||
targetData->formats.insert(rulesPtr->formatName.toLower(), rulesPtr);
|
||||
} else {
|
||||
emit addFormat(rulesPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -389,7 +400,22 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml)
|
|||
.upsideDownArt = upsideDown};
|
||||
CardInfoPtr newCard = CardInfo::newInstance(name, text, isToken, properties, relatedCards,
|
||||
reverseRelatedCards, _sets, attributes);
|
||||
emit addCard(newCard);
|
||||
if (targetData) {
|
||||
// Mirror CardDatabase::addCard: if a card with this name already
|
||||
// exists, merge the new printings into it instead of replacing.
|
||||
if (auto existing = targetData->cards.value(name)) {
|
||||
for (const auto &printings : newCard->getSets()) {
|
||||
for (const auto &printing : printings) {
|
||||
existing->addToSet(printing.getSet(), printing);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
targetData->cards.insert(name, newCard);
|
||||
targetData->simpleNameCards.insert(newCard->getSimpleName(), newCard);
|
||||
}
|
||||
} else {
|
||||
emit addCard(newCard);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue