Duplicate cards & empty setlist (#3283)
* Card duplicates handled * clangify * kinda works, some cards are still duplicated * separate card entries grouped together * clangify
This commit is contained in:
parent
81803e2612
commit
d36f86c523
5 changed files with 35 additions and 16 deletions
|
@ -397,8 +397,8 @@ CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoa
|
|||
|
||||
CardDatabase::~CardDatabase()
|
||||
{
|
||||
qDeleteAll(availableParsers);
|
||||
clear();
|
||||
qDeleteAll(availableParsers);
|
||||
}
|
||||
|
||||
void CardDatabase::clear()
|
||||
|
@ -417,6 +417,9 @@ void CardDatabase::clear()
|
|||
simpleNameCards.clear();
|
||||
|
||||
sets.clear();
|
||||
for (auto parser : availableParsers) {
|
||||
parser->clearSetlist();
|
||||
}
|
||||
|
||||
loadStatus = NotLoaded;
|
||||
|
||||
|
@ -430,6 +433,19 @@ void CardDatabase::addCard(CardInfoPtr card)
|
|||
return;
|
||||
}
|
||||
|
||||
// if card already exists just add the new set property
|
||||
if (cards.contains(card->getName())) {
|
||||
CardInfoPtr sameCard = cards[card->getName()];
|
||||
for (auto set : card->getSets()) {
|
||||
QString setName = set->getCorrectedShortName();
|
||||
sameCard->setSet(set);
|
||||
sameCard->setMuId(setName, card->getMuId(setName));
|
||||
sameCard->setRarity(setName, card->getRarity(setName));
|
||||
sameCard->setSetNumber(setName, card->getCollectorNumber(setName));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
addCardMutex->lock();
|
||||
cards.insert(card->getName(), card);
|
||||
simpleNameCards.insert(card->getSimpleName(), card);
|
||||
|
@ -444,19 +460,18 @@ void CardDatabase::removeCard(CardInfoPtr card)
|
|||
return;
|
||||
}
|
||||
|
||||
foreach (CardRelation *cardRelation, card->getRelatedCards())
|
||||
for (auto *cardRelation : card->getRelatedCards())
|
||||
cardRelation->deleteLater();
|
||||
|
||||
foreach (CardRelation *cardRelation, card->getReverseRelatedCards())
|
||||
for (auto *cardRelation : card->getReverseRelatedCards())
|
||||
cardRelation->deleteLater();
|
||||
|
||||
foreach (CardRelation *cardRelation, card->getReverseRelatedCards2Me())
|
||||
for (auto *cardRelation : card->getReverseRelatedCards2Me())
|
||||
cardRelation->deleteLater();
|
||||
|
||||
removeCardMutex->lock();
|
||||
cards.remove(card->getName());
|
||||
simpleNameCards.remove(card->getSimpleName());
|
||||
card.clear();
|
||||
removeCardMutex->unlock();
|
||||
emit cardRemoved(card);
|
||||
}
|
||||
|
@ -567,21 +582,13 @@ LoadStatus CardDatabase::loadCardDatabases()
|
|||
|
||||
// load custom card databases
|
||||
QDir dir(settingsCache->getCustomCardDatabasePath());
|
||||
foreach (QString fileName,
|
||||
dir.entryList(QStringList("*.xml"), QDir::Files | QDir::Readable, QDir::Name | QDir::IgnoreCase)) {
|
||||
for (QString fileName :
|
||||
dir.entryList(QStringList("*.xml"), QDir::Files | QDir::Readable, QDir::Name | QDir::IgnoreCase)) {
|
||||
loadCardDatabase(dir.absoluteFilePath(fileName));
|
||||
}
|
||||
|
||||
// AFTER all the cards have been loaded
|
||||
|
||||
// reorder sets (TODO: refactor, this smells)
|
||||
SetList allSets;
|
||||
QHashIterator<QString, CardSetPtr> setsIterator(sets);
|
||||
while (setsIterator.hasNext()) {
|
||||
allSets.append(setsIterator.next().value());
|
||||
}
|
||||
allSets.sortByKey();
|
||||
|
||||
// resolve the reverse-related tags
|
||||
refreshCachedReverseRelatedCards();
|
||||
|
||||
|
@ -660,7 +667,7 @@ void CardDatabase::checkUnknownSets()
|
|||
SetList sets = getSetList();
|
||||
|
||||
if (sets.getEnabledSetsNum()) {
|
||||
// if some sets are first found on thus run, ask the user
|
||||
// if some sets are first found on this run, ask the user
|
||||
int numUnknownSets = sets.getUnknownSetsNum();
|
||||
QStringList unknownSetNames = sets.getUnknownSetsNames();
|
||||
if (numUnknownSets > 0) {
|
||||
|
|
|
@ -335,6 +335,11 @@ public:
|
|||
// void setLoyalty(int _loyalty) { loyalty = _loyalty; emit cardInfoChanged(smartThis); }
|
||||
// void setCustomPicURL(const QString &_set, const QString &_customPicURL) { customPicURLs.insert(_set,
|
||||
// _customPicURL); }
|
||||
void setSet(const CardSetPtr &_set)
|
||||
{
|
||||
sets.append(_set);
|
||||
refreshCachedSetNames();
|
||||
}
|
||||
void setMuId(const QString &_set, const int &_muId)
|
||||
{
|
||||
muIds.insert(_set, _muId);
|
||||
|
|
|
@ -15,6 +15,7 @@ public:
|
|||
virtual bool getCanParseFile(const QString &name, QIODevice &device) = 0;
|
||||
virtual void parseFile(QIODevice &device) = 0;
|
||||
virtual bool saveToFile(SetNameMap sets, CardNameMap cards, const QString &fileName) = 0;
|
||||
virtual void clearSetlist() = 0;
|
||||
signals:
|
||||
virtual void addCard(CardInfoPtr card) = 0;
|
||||
};
|
||||
|
|
|
@ -80,6 +80,11 @@ CardSetPtr CockatriceXml3Parser::internalAddSet(const QString &setName,
|
|||
return newSet;
|
||||
}
|
||||
|
||||
void CockatriceXml3Parser::clearSetlist()
|
||||
{
|
||||
sets.clear();
|
||||
}
|
||||
|
||||
void CockatriceXml3Parser::loadSetsFromXml(QXmlStreamReader &xml)
|
||||
{
|
||||
while (!xml.atEnd()) {
|
||||
|
|
|
@ -15,6 +15,7 @@ public:
|
|||
bool getCanParseFile(const QString &name, QIODevice &device);
|
||||
void parseFile(QIODevice &device);
|
||||
bool saveToFile(SetNameMap sets, CardNameMap cards, const QString &fileName);
|
||||
void clearSetlist();
|
||||
|
||||
private:
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue