mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-12 23:59:34 -08:00
[Refactor] Clean up CardDatabase (#6034)
* Inline getCardFromMap map.value already returns a default-constructed value if the key is not present * Use for-each instead of iterator * Add new method * clean up method order * fix build failure * clean up getPreferredPrinting usage * early returns
This commit is contained in:
@@ -324,9 +324,7 @@ struct SetProviderIdToPreferred
|
||||
void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const
|
||||
{
|
||||
Q_UNUSED(node);
|
||||
PrintingInfo preferredPrinting = CardDatabaseManager::getInstance()->getSpecificPrinting(
|
||||
card->getName(),
|
||||
CardDatabaseManager::getInstance()->getPreferredPrintingProviderIdForCard(card->getName()));
|
||||
PrintingInfo preferredPrinting = CardDatabaseManager::getInstance()->getPreferredPrinting(card->getName());
|
||||
QString providerId = preferredPrinting.getProperty("uuid");
|
||||
QString setShortName = preferredPrinting.getSet()->getShortName();
|
||||
QString collectorNumber = preferredPrinting.getProperty("num");
|
||||
|
||||
@@ -44,11 +44,9 @@ void CardDatabase::clear()
|
||||
{
|
||||
clearDatabaseMutex->lock();
|
||||
|
||||
QHashIterator<QString, CardInfoPtr> i(cards);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
if (i.value()) {
|
||||
removeCard(i.value());
|
||||
for (const auto &card : cards.values()) {
|
||||
if (card) {
|
||||
removeCard(card);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,14 +111,14 @@ void CardDatabase::removeCard(CardInfoPtr card)
|
||||
|
||||
CardInfoPtr CardDatabase::getCard(const QString &cardName) const
|
||||
{
|
||||
return getCardFromMap(cards, cardName);
|
||||
return cards.value(cardName);
|
||||
}
|
||||
|
||||
QList<CardInfoPtr> CardDatabase::getCards(const QStringList &cardNames) const
|
||||
{
|
||||
QList<CardInfoPtr> cardInfos;
|
||||
for (const QString &cardName : cardNames) {
|
||||
CardInfoPtr ptr = getCardFromMap(cards, cardName);
|
||||
CardInfoPtr ptr = cards.value(cardName);
|
||||
if (ptr)
|
||||
cardInfos.append(ptr);
|
||||
}
|
||||
@@ -162,7 +160,7 @@ CardInfoPtr CardDatabase::getCardByNameAndProviderId(const QString &cardName, co
|
||||
|
||||
CardInfoPtr CardDatabase::getCardBySimpleName(const QString &cardName) const
|
||||
{
|
||||
return getCardFromMap(simpleNameCards, CardInfo::simplifyName(cardName));
|
||||
return simpleNameCards.value(CardInfo::simplifyName(cardName));
|
||||
}
|
||||
|
||||
CardInfoPtr CardDatabase::guessCard(const QString &cardName, const QString &providerId) const
|
||||
@@ -198,22 +196,12 @@ void CardDatabase::addSet(CardSetPtr set)
|
||||
SetList CardDatabase::getSetList() const
|
||||
{
|
||||
SetList result;
|
||||
QHashIterator<QString, CardSetPtr> i(sets);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
result << i.value();
|
||||
for (auto set : sets.values()) {
|
||||
result << set;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
CardInfoPtr CardDatabase::getCardFromMap(const CardNameMap &cardMap, const QString &cardName) const
|
||||
{
|
||||
if (cardMap.contains(cardName))
|
||||
return cardMap.value(cardName);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
LoadStatus CardDatabase::loadFromFile(const QString &fileName)
|
||||
{
|
||||
QFile file(fileName);
|
||||
@@ -312,6 +300,11 @@ void CardDatabase::refreshPreferredPrintings()
|
||||
PrintingInfo CardDatabase::getPreferredPrinting(const QString &cardName) const
|
||||
{
|
||||
CardInfoPtr cardInfo = getCard(cardName);
|
||||
return getPreferredPrinting(cardInfo);
|
||||
}
|
||||
|
||||
PrintingInfo CardDatabase::getPreferredPrinting(const CardInfoPtr &cardInfo) const
|
||||
{
|
||||
if (!cardInfo) {
|
||||
return PrintingInfo(nullptr);
|
||||
}
|
||||
@@ -404,15 +397,16 @@ PrintingInfo CardDatabase::getSpecificPrinting(const QString &cardName,
|
||||
QString CardDatabase::getPreferredPrintingProviderIdForCard(const QString &cardName)
|
||||
{
|
||||
PrintingInfo preferredPrinting = getPreferredPrinting(cardName);
|
||||
QString preferredPrintingProviderId = preferredPrinting.getProperty(QString("uuid"));
|
||||
if (preferredPrintingProviderId.isEmpty()) {
|
||||
CardInfoPtr defaultCardInfo = getCard(cardName);
|
||||
if (defaultCardInfo.isNull()) {
|
||||
return cardName;
|
||||
}
|
||||
return defaultCardInfo->getName();
|
||||
QString uuid = preferredPrinting.getProperty("uuid");
|
||||
if (!uuid.isEmpty()) {
|
||||
return uuid;
|
||||
}
|
||||
return preferredPrintingProviderId;
|
||||
|
||||
CardInfoPtr defaultCardInfo = getCard(cardName);
|
||||
if (defaultCardInfo.isNull()) {
|
||||
return cardName;
|
||||
}
|
||||
return defaultCardInfo->getName();
|
||||
}
|
||||
|
||||
bool CardDatabase::isProviderIdForPreferredPrinting(const QString &cardName, const QString &providerId)
|
||||
@@ -470,9 +464,8 @@ void CardDatabase::refreshCachedReverseRelatedCards()
|
||||
QStringList CardDatabase::getAllMainCardTypes() const
|
||||
{
|
||||
QSet<QString> types;
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
types.insert(cardIterator.next().value()->getMainCardType());
|
||||
for (const auto &card : cards.values()) {
|
||||
types.insert(card->getMainCardType());
|
||||
}
|
||||
return types.values();
|
||||
}
|
||||
@@ -480,10 +473,9 @@ QStringList CardDatabase::getAllMainCardTypes() const
|
||||
QMap<QString, int> CardDatabase::getAllMainCardTypesWithCount() const
|
||||
{
|
||||
QMap<QString, int> typeCounts;
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
|
||||
while (cardIterator.hasNext()) {
|
||||
QString type = cardIterator.next().value()->getMainCardType();
|
||||
for (const auto &card : cards.values()) {
|
||||
QString type = card->getMainCardType();
|
||||
typeCounts[type]++;
|
||||
}
|
||||
|
||||
@@ -493,10 +485,9 @@ QMap<QString, int> CardDatabase::getAllMainCardTypesWithCount() const
|
||||
QMap<QString, int> CardDatabase::getAllSubCardTypesWithCount() const
|
||||
{
|
||||
QMap<QString, int> typeCounts;
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
|
||||
while (cardIterator.hasNext()) {
|
||||
QString type = cardIterator.next().value()->getCardType();
|
||||
for (const auto &card : cards.values()) {
|
||||
QString type = card->getCardType();
|
||||
|
||||
QStringList parts = type.split(" — ");
|
||||
|
||||
|
||||
@@ -52,7 +52,6 @@ protected:
|
||||
QVector<ICardDatabaseParser *> availableParsers;
|
||||
|
||||
private:
|
||||
CardInfoPtr getCardFromMap(const CardNameMap &cardMap, const QString &cardName) const;
|
||||
void checkUnknownSets();
|
||||
void refreshCachedReverseRelatedCards();
|
||||
|
||||
@@ -65,15 +64,20 @@ public:
|
||||
~CardDatabase() override;
|
||||
void clear();
|
||||
void removeCard(CardInfoPtr card);
|
||||
|
||||
[[nodiscard]] CardInfoPtr getCard(const QString &cardName) const;
|
||||
[[nodiscard]] QList<CardInfoPtr> getCards(const QStringList &cardNames) const;
|
||||
QList<CardInfoPtr> getCardsByNameAndProviderId(const QMap<QString, QString> &cardNames) const;
|
||||
[[nodiscard]] CardInfoPtr getCardByNameAndProviderId(const QString &cardName, const QString &providerId) const;
|
||||
|
||||
[[nodiscard]] PrintingInfo getPreferredPrinting(const QString &cardName) const;
|
||||
[[nodiscard]] PrintingInfo getPreferredPrinting(const CardInfoPtr &cardInfo) const;
|
||||
[[nodiscard]] PrintingInfo getSpecificPrinting(const QString &cardName, const QString &providerId) const;
|
||||
PrintingInfo
|
||||
getSpecificPrinting(const QString &cardName, const QString &setShortName, const QString &collectorNumber) const;
|
||||
QString getPreferredPrintingProviderIdForCard(const QString &cardName);
|
||||
bool isProviderIdForPreferredPrinting(const QString &cardName, const QString &providerId);
|
||||
|
||||
[[nodiscard]] CardInfoPtr guessCard(const QString &cardName, const QString &providerId = QString()) const;
|
||||
|
||||
/*
|
||||
@@ -83,7 +87,6 @@ public:
|
||||
[[nodiscard]] CardInfoPtr getCardBySimpleName(const QString &cardName) const;
|
||||
|
||||
CardSetPtr getSet(const QString &setName);
|
||||
bool isProviderIdForPreferredPrinting(const QString &cardName, const QString &providerId);
|
||||
static PrintingInfo getSetInfoForCard(const CardInfoPtr &_card);
|
||||
const CardNameMap &getCardList() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user