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()
{
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) {

View file

@ -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);

View file

@ -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;
};

View file

@ -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()) {

View file

@ -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:
/*