From d36f86c523e9f16914ade18abfd07f64cb17049e Mon Sep 17 00:00:00 2001 From: David Szabo Date: Sun, 17 Jun 2018 04:42:22 +0200 Subject: [PATCH] Duplicate cards & empty setlist (#3283) * Card duplicates handled * clangify * kinda works, some cards are still duplicated * separate card entries grouped together * clangify --- cockatrice/src/carddatabase.cpp | 39 +++++++++++-------- cockatrice/src/carddatabase.h | 5 +++ .../src/carddbparser/carddatabaseparser.h | 1 + .../src/carddbparser/cockatricexml3.cpp | 5 +++ cockatrice/src/carddbparser/cockatricexml3.h | 1 + 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/cockatrice/src/carddatabase.cpp b/cockatrice/src/carddatabase.cpp index 431544f8..7ca0cda4 100644 --- a/cockatrice/src/carddatabase.cpp +++ b/cockatrice/src/carddatabase.cpp @@ -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 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) { diff --git a/cockatrice/src/carddatabase.h b/cockatrice/src/carddatabase.h index 3451684b..c58c1ad8 100644 --- a/cockatrice/src/carddatabase.h +++ b/cockatrice/src/carddatabase.h @@ -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); diff --git a/cockatrice/src/carddbparser/carddatabaseparser.h b/cockatrice/src/carddbparser/carddatabaseparser.h index 71e3366d..d094b6d7 100644 --- a/cockatrice/src/carddbparser/carddatabaseparser.h +++ b/cockatrice/src/carddbparser/carddatabaseparser.h @@ -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; }; diff --git a/cockatrice/src/carddbparser/cockatricexml3.cpp b/cockatrice/src/carddbparser/cockatricexml3.cpp index 0f5ac821..d98202ac 100644 --- a/cockatrice/src/carddbparser/cockatricexml3.cpp +++ b/cockatrice/src/carddbparser/cockatricexml3.cpp @@ -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()) { diff --git a/cockatrice/src/carddbparser/cockatricexml3.h b/cockatrice/src/carddbparser/cockatricexml3.h index 1e95b7e8..286ee3af 100644 --- a/cockatrice/src/carddbparser/cockatricexml3.h +++ b/cockatrice/src/carddbparser/cockatricexml3.h @@ -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: /*