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:
David Szabo 2018-06-17 04:42:22 +02:00 committed by Zach H
parent 81803e2612
commit d36f86c523
5 changed files with 35 additions and 16 deletions

View file

@ -397,8 +397,8 @@ CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoa
CardDatabase::~CardDatabase() CardDatabase::~CardDatabase()
{ {
qDeleteAll(availableParsers);
clear(); clear();
qDeleteAll(availableParsers);
} }
void CardDatabase::clear() void CardDatabase::clear()
@ -417,6 +417,9 @@ void CardDatabase::clear()
simpleNameCards.clear(); simpleNameCards.clear();
sets.clear(); sets.clear();
for (auto parser : availableParsers) {
parser->clearSetlist();
}
loadStatus = NotLoaded; loadStatus = NotLoaded;
@ -430,6 +433,19 @@ void CardDatabase::addCard(CardInfoPtr card)
return; 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(); addCardMutex->lock();
cards.insert(card->getName(), card); cards.insert(card->getName(), card);
simpleNameCards.insert(card->getSimpleName(), card); simpleNameCards.insert(card->getSimpleName(), card);
@ -444,19 +460,18 @@ void CardDatabase::removeCard(CardInfoPtr card)
return; return;
} }
foreach (CardRelation *cardRelation, card->getRelatedCards()) for (auto *cardRelation : card->getRelatedCards())
cardRelation->deleteLater(); cardRelation->deleteLater();
foreach (CardRelation *cardRelation, card->getReverseRelatedCards()) for (auto *cardRelation : card->getReverseRelatedCards())
cardRelation->deleteLater(); cardRelation->deleteLater();
foreach (CardRelation *cardRelation, card->getReverseRelatedCards2Me()) for (auto *cardRelation : card->getReverseRelatedCards2Me())
cardRelation->deleteLater(); cardRelation->deleteLater();
removeCardMutex->lock(); removeCardMutex->lock();
cards.remove(card->getName()); cards.remove(card->getName());
simpleNameCards.remove(card->getSimpleName()); simpleNameCards.remove(card->getSimpleName());
card.clear();
removeCardMutex->unlock(); removeCardMutex->unlock();
emit cardRemoved(card); emit cardRemoved(card);
} }
@ -567,21 +582,13 @@ LoadStatus CardDatabase::loadCardDatabases()
// load custom card databases // load custom card databases
QDir dir(settingsCache->getCustomCardDatabasePath()); QDir dir(settingsCache->getCustomCardDatabasePath());
foreach (QString fileName, for (QString fileName :
dir.entryList(QStringList("*.xml"), QDir::Files | QDir::Readable, QDir::Name | QDir::IgnoreCase)) { dir.entryList(QStringList("*.xml"), QDir::Files | QDir::Readable, QDir::Name | QDir::IgnoreCase)) {
loadCardDatabase(dir.absoluteFilePath(fileName)); loadCardDatabase(dir.absoluteFilePath(fileName));
} }
// AFTER all the cards have been loaded // 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 // resolve the reverse-related tags
refreshCachedReverseRelatedCards(); refreshCachedReverseRelatedCards();
@ -660,7 +667,7 @@ void CardDatabase::checkUnknownSets()
SetList sets = getSetList(); SetList sets = getSetList();
if (sets.getEnabledSetsNum()) { 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(); int numUnknownSets = sets.getUnknownSetsNum();
QStringList unknownSetNames = sets.getUnknownSetsNames(); QStringList unknownSetNames = sets.getUnknownSetsNames();
if (numUnknownSets > 0) { if (numUnknownSets > 0) {

View file

@ -335,6 +335,11 @@ public:
// void setLoyalty(int _loyalty) { loyalty = _loyalty; emit cardInfoChanged(smartThis); } // void setLoyalty(int _loyalty) { loyalty = _loyalty; emit cardInfoChanged(smartThis); }
// void setCustomPicURL(const QString &_set, const QString &_customPicURL) { customPicURLs.insert(_set, // void setCustomPicURL(const QString &_set, const QString &_customPicURL) { customPicURLs.insert(_set,
// _customPicURL); } // _customPicURL); }
void setSet(const CardSetPtr &_set)
{
sets.append(_set);
refreshCachedSetNames();
}
void setMuId(const QString &_set, const int &_muId) void setMuId(const QString &_set, const int &_muId)
{ {
muIds.insert(_set, _muId); muIds.insert(_set, _muId);

View file

@ -15,6 +15,7 @@ public:
virtual bool getCanParseFile(const QString &name, QIODevice &device) = 0; virtual bool getCanParseFile(const QString &name, QIODevice &device) = 0;
virtual void parseFile(QIODevice &device) = 0; virtual void parseFile(QIODevice &device) = 0;
virtual bool saveToFile(SetNameMap sets, CardNameMap cards, const QString &fileName) = 0; virtual bool saveToFile(SetNameMap sets, CardNameMap cards, const QString &fileName) = 0;
virtual void clearSetlist() = 0;
signals: signals:
virtual void addCard(CardInfoPtr card) = 0; virtual void addCard(CardInfoPtr card) = 0;
}; };

View file

@ -80,6 +80,11 @@ CardSetPtr CockatriceXml3Parser::internalAddSet(const QString &setName,
return newSet; return newSet;
} }
void CockatriceXml3Parser::clearSetlist()
{
sets.clear();
}
void CockatriceXml3Parser::loadSetsFromXml(QXmlStreamReader &xml) void CockatriceXml3Parser::loadSetsFromXml(QXmlStreamReader &xml)
{ {
while (!xml.atEnd()) { while (!xml.atEnd()) {

View file

@ -15,6 +15,7 @@ public:
bool getCanParseFile(const QString &name, QIODevice &device); bool getCanParseFile(const QString &name, QIODevice &device);
void parseFile(QIODevice &device); void parseFile(QIODevice &device);
bool saveToFile(SetNameMap sets, CardNameMap cards, const QString &fileName); bool saveToFile(SetNameMap sets, CardNameMap cards, const QString &fileName);
void clearSetlist();
private: private:
/* /*