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()
|
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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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:
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue