mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-01 11:03:54 -07:00
Have CardDatabase::getPreferredPrintingInfo respect card provider ID overrides (pinned printings)
Took 13 minutes Took 37 seconds Took 10 seconds Took 10 seconds # Commit time for manual adjustment: # Took 30 seconds Took 15 seconds Took 8 minutes Took 21 seconds
This commit is contained in:
parent
dbd1d30ca8
commit
3ccb0cbb23
13 changed files with 97 additions and 38 deletions
|
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
#define COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class ICardPreferenceProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~ICardPreferenceProvider() = default;
|
||||||
|
virtual QString getCardPreferenceOverride(const QString &cardName) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
#define COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
#include "interface_card_preference_provider.h"
|
||||||
|
|
||||||
|
class NoopCardPreferenceProvider : public ICardPreferenceProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QString getCardPreferenceOverride(const QString &) const override
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
#ifndef COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
#define COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
#include "../../settings/cache_settings.h"
|
||||||
|
#include "interface_card_preference_provider.h"
|
||||||
|
|
||||||
|
class SettingsCardPreferenceProvider : public ICardPreferenceProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QString getCardPreferenceOverride(const QString &cardName) const override
|
||||||
|
{
|
||||||
|
return SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H
|
||||||
|
|
@ -199,16 +199,7 @@ void DlgCreateToken::tokenSelectionChanged(const QModelIndex ¤t, const QMo
|
||||||
annotationEdit->setText("");
|
annotationEdit->setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto &cardProviderId =
|
pic->setCard(CardDatabaseManager::query()->getPreferredCard(cardInfo));
|
||||||
SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardInfo->getName());
|
|
||||||
if (!cardProviderId.isEmpty()) {
|
|
||||||
CardRef ref;
|
|
||||||
ref.name = cardInfo->getName();
|
|
||||||
ref.providerId = cardProviderId;
|
|
||||||
pic->setCard(CardDatabaseManager::query()->getCard(ref));
|
|
||||||
} else {
|
|
||||||
pic->setCard(CardDatabaseManager::query()->getPreferredCard(cardInfo));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DlgCreateToken::updateSearchFieldWithoutUpdatingFilter(const QString &newValue) const
|
void DlgCreateToken::updateSearchFieldWithoutUpdatingFilter(const QString &newValue) const
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ void DeckEditorDatabaseDisplayWidget::updateCard(const QModelIndex ¤t, con
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!current.model()->hasChildren(current.sibling(current.row(), 0))) {
|
if (!current.model()->hasChildren(current.sibling(current.row(), 0))) {
|
||||||
emit cardChanged(getCardOrPinnedPrinting(cardName));
|
emit cardChanged(CardDatabaseManager::query()->getPreferredCard(cardName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -176,21 +176,7 @@ ExactCard DeckEditorDatabaseDisplayWidget::currentCard() const
|
||||||
|
|
||||||
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
|
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
|
||||||
|
|
||||||
return getCardOrPinnedPrinting(cardName);
|
return CardDatabaseManager::query()->getPreferredCard(cardName);
|
||||||
}
|
|
||||||
|
|
||||||
ExactCard DeckEditorDatabaseDisplayWidget::getCardOrPinnedPrinting(QString cardName) const
|
|
||||||
{
|
|
||||||
const auto &cardProviderId = SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName);
|
|
||||||
|
|
||||||
ExactCard card = CardDatabaseManager::query()->getCard({cardName});
|
|
||||||
|
|
||||||
if (cardProviderId != "") {
|
|
||||||
return ExactCard(card.getCardPtr(),
|
|
||||||
CardDatabaseManager::query()->getSpecificPrinting({cardName, cardProviderId}));
|
|
||||||
}
|
|
||||||
|
|
||||||
return card;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckEditorDatabaseDisplayWidget::databaseCustomMenu(QPoint point)
|
void DeckEditorDatabaseDisplayWidget::databaseCustomMenu(QPoint point)
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
ExactCard currentCard() const;
|
ExactCard currentCard() const;
|
||||||
ExactCard getCardOrPinnedPrinting(QString cardName) const;
|
|
||||||
void setFilterTree(FilterTree *filterTree);
|
void setFilterTree(FilterTree *filterTree);
|
||||||
void clearAllDatabaseFilters();
|
void clearAllDatabaseFilters();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,19 @@
|
||||||
#define MAIN_H
|
#define MAIN_H
|
||||||
|
|
||||||
#include <libcockatrice/card/database/card_database.h>
|
#include <libcockatrice/card/database/card_database.h>
|
||||||
|
#include <libcockatrice/card/database/interface/noop_card_preference_provider.h">
|
||||||
#include <libcockatrice/card/database/parser/cockatrice_xml_4.h>
|
#include <libcockatrice/card/database/parser/cockatrice_xml_4.h>
|
||||||
|
|
||||||
class CardDatabaseConverter : public CardDatabase
|
class CardDatabaseConverter : public CardDatabase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
explicit CardDatabaseConverter()
|
||||||
|
{
|
||||||
|
// Replace querier with one that ignores SettingsCache
|
||||||
|
delete querier;
|
||||||
|
querier = new CardDatabaseQuerier(this, this, QSharedPointer<NoopCardPreferenceProvider>::create());
|
||||||
|
};
|
||||||
|
|
||||||
LoadStatus loadCardDatabase(const QString &path)
|
LoadStatus loadCardDatabase(const QString &path)
|
||||||
{
|
{
|
||||||
return loader->loadCardDatabase(path);
|
return loader->loadCardDatabase(path);
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,8 @@
|
||||||
#include <libcockatrice/settings/cache_settings.h>
|
#include <libcockatrice/settings/cache_settings.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoaded)
|
CardDatabase::CardDatabase(QObject *parent, QSharedPointer<ICardPreferenceProvider> prefs)
|
||||||
|
: QObject(parent), loadStatus(NotLoaded)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<CardInfoPtr>("CardInfoPtr");
|
qRegisterMetaType<CardInfoPtr>("CardInfoPtr");
|
||||||
qRegisterMetaType<CardInfoPtr>("CardSetPtr");
|
qRegisterMetaType<CardInfoPtr>("CardSetPtr");
|
||||||
|
|
@ -28,7 +29,7 @@ CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoa
|
||||||
connect(loader, &CardDatabaseLoader::newSetsFound, this, &CardDatabase::cardDatabaseNewSetsFound);
|
connect(loader, &CardDatabaseLoader::newSetsFound, this, &CardDatabase::cardDatabaseNewSetsFound);
|
||||||
connect(loader, &CardDatabaseLoader::allNewSetsEnabled, this, &CardDatabase::cardDatabaseAllNewSetsEnabled);
|
connect(loader, &CardDatabaseLoader::allNewSetsEnabled, this, &CardDatabase::cardDatabaseAllNewSetsEnabled);
|
||||||
|
|
||||||
querier = new CardDatabaseQuerier(this, this);
|
querier = new CardDatabaseQuerier(this, this, prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
CardDatabase::~CardDatabase()
|
CardDatabase::~CardDatabase()
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../set/card_set_list.h"
|
#include "../set/card_set_list.h"
|
||||||
#include "card_database_loader.h"
|
#include "card_database_loader.h"
|
||||||
#include "card_database_querier.h"
|
#include "card_database_querier.h"
|
||||||
|
#include "interface/noop_card_preference_provider.h"
|
||||||
|
|
||||||
#include <QBasicMutex>
|
#include <QBasicMutex>
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
|
|
@ -57,7 +58,7 @@ private:
|
||||||
*removeCardMutex = new QBasicMutex();
|
*removeCardMutex = new QBasicMutex();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CardDatabase(QObject *parent = nullptr);
|
explicit CardDatabase(QObject *parent = nullptr, QSharedPointer<ICardPreferenceProvider> prefs = nullptr);
|
||||||
~CardDatabase() override;
|
~CardDatabase() override;
|
||||||
|
|
||||||
void removeCard(CardInfoPtr card);
|
void removeCard(CardInfoPtr card);
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
CardDatabase *CardDatabaseManager::getInstance()
|
CardDatabase *CardDatabaseManager::getInstance()
|
||||||
{
|
{
|
||||||
static CardDatabase instance; // Created only once, on first access
|
static CardDatabase instance(
|
||||||
|
nullptr, QSharedPointer<SettingsCardPreferenceProvider>::create()); // Created only once, on first access
|
||||||
return &instance;
|
return &instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,14 @@
|
||||||
#include "../printing/exact_card.h"
|
#include "../printing/exact_card.h"
|
||||||
#include "../set/card_set_comparator.h"
|
#include "../set/card_set_comparator.h"
|
||||||
#include "card_database.h"
|
#include "card_database.h"
|
||||||
|
#include "interface/settings_card_preference_provider.h"
|
||||||
|
|
||||||
#include <qrandom.h>
|
#include <qrandom.h>
|
||||||
|
|
||||||
CardDatabaseQuerier::CardDatabaseQuerier(QObject *_parent, const CardDatabase *_db) : QObject(_parent), db(_db)
|
CardDatabaseQuerier::CardDatabaseQuerier(QObject *_parent,
|
||||||
|
const CardDatabase *_db,
|
||||||
|
const QSharedPointer<ICardPreferenceProvider> &prefs)
|
||||||
|
: QObject(_parent), db(_db), prefs(prefs)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -204,6 +208,17 @@ PrintingInfo CardDatabaseQuerier::getSpecificPrinting(const QString &cardName,
|
||||||
return PrintingInfo(nullptr);
|
return PrintingInfo(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the card representing the preferred printing of the cardInfo
|
||||||
|
*
|
||||||
|
* @param cardName The cardName to find the preferred card and printing for
|
||||||
|
* @return A specific printing of a card
|
||||||
|
*/
|
||||||
|
ExactCard CardDatabaseQuerier::getPreferredCard(const QString &cardName) const
|
||||||
|
{
|
||||||
|
return getPreferredCard(getCardInfo(cardName));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the card representing the preferred printing of the cardInfo
|
* Gets the card representing the preferred printing of the cardInfo
|
||||||
*
|
*
|
||||||
|
|
@ -236,6 +251,12 @@ PrintingInfo CardDatabaseQuerier::getPreferredPrinting(const CardInfoPtr &cardIn
|
||||||
return PrintingInfo(nullptr);
|
return PrintingInfo(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto &pinnedPrintingProviderId = prefs->getCardPreferenceOverride(cardInfo->getName());
|
||||||
|
|
||||||
|
if (!pinnedPrintingProviderId.isEmpty()) {
|
||||||
|
return getSpecificPrinting({cardInfo->getName(), pinnedPrintingProviderId});
|
||||||
|
}
|
||||||
|
|
||||||
SetToPrintingsMap setMap = cardInfo->getSets();
|
SetToPrintingsMap setMap = cardInfo->getSets();
|
||||||
if (setMap.empty()) {
|
if (setMap.empty()) {
|
||||||
return PrintingInfo(nullptr);
|
return PrintingInfo(nullptr);
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
#include "../card_info.h"
|
#include "../card_info.h"
|
||||||
#include "../printing/exact_card.h"
|
#include "../printing/exact_card.h"
|
||||||
|
#include "interface/interface_card_preference_provider.h"
|
||||||
|
#include "interface/settings_card_preference_provider.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <libcockatrice/utility/card_ref.h>
|
#include <libcockatrice/utility/card_ref.h>
|
||||||
|
|
@ -19,7 +21,9 @@ class CardDatabaseQuerier : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CardDatabaseQuerier(QObject *parent, const CardDatabase *db);
|
explicit CardDatabaseQuerier(QObject *parent,
|
||||||
|
const CardDatabase *db,
|
||||||
|
const QSharedPointer<ICardPreferenceProvider> &prefs);
|
||||||
|
|
||||||
[[nodiscard]] CardInfoPtr getCardInfo(const QString &cardName) const;
|
[[nodiscard]] CardInfoPtr getCardInfo(const QString &cardName) const;
|
||||||
[[nodiscard]] QList<CardInfoPtr> getCardInfos(const QStringList &cardNames) const;
|
[[nodiscard]] QList<CardInfoPtr> getCardInfos(const QStringList &cardNames) const;
|
||||||
|
|
@ -46,6 +50,7 @@ public:
|
||||||
[[nodiscard]] PrintingInfo getSpecificPrinting(const CardRef &cardRef) const;
|
[[nodiscard]] PrintingInfo getSpecificPrinting(const CardRef &cardRef) const;
|
||||||
[[nodiscard]] PrintingInfo
|
[[nodiscard]] PrintingInfo
|
||||||
getSpecificPrinting(const QString &cardName, const QString &setCode, const QString &collectorNumber) const;
|
getSpecificPrinting(const QString &cardName, const QString &setCode, const QString &collectorNumber) const;
|
||||||
|
ExactCard getPreferredCard(const QString &cardName) const;
|
||||||
[[nodiscard]] PrintingInfo findPrintingWithId(const CardInfoPtr &card, const QString &providerId) const;
|
[[nodiscard]] PrintingInfo findPrintingWithId(const CardInfoPtr &card, const QString &providerId) const;
|
||||||
|
|
||||||
[[nodiscard]] QStringList getAllMainCardTypes() const;
|
[[nodiscard]] QStringList getAllMainCardTypes() const;
|
||||||
|
|
@ -55,6 +60,8 @@ public:
|
||||||
private:
|
private:
|
||||||
const CardDatabase *db;
|
const CardDatabase *db;
|
||||||
|
|
||||||
|
QSharedPointer<ICardPreferenceProvider> prefs;
|
||||||
|
|
||||||
CardInfoPtr lookupCardByName(const QString &name) const;
|
CardInfoPtr lookupCardByName(const QString &name) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,13 @@ class CardQuery : public ::testing::Test
|
||||||
protected:
|
protected:
|
||||||
void SetUp() override
|
void SetUp() override
|
||||||
{
|
{
|
||||||
cat = CardDatabaseManager::query()->getCardBySimpleName("Cat");
|
CardDatabase *db = new CardDatabase(nullptr, QSharedPointer<NoopCardPreferenceProvider>::create());
|
||||||
notDeadAfterAll = CardDatabaseManager::query()->getCardBySimpleName("Not Dead");
|
db->loadCardDatabases();
|
||||||
truth = CardDatabaseManager::query()->getCardBySimpleName("Truth");
|
|
||||||
doctor = CardDatabaseManager::query()->getCardBySimpleName("Doctor");
|
cat = db->query()->getCardBySimpleName("Cat");
|
||||||
|
notDeadAfterAll = db->query()->getCardBySimpleName("Not Dead");
|
||||||
|
truth = db->query()->getCardBySimpleName("Truth");
|
||||||
|
doctor = db->query()->getCardBySimpleName("Doctor");
|
||||||
}
|
}
|
||||||
// void TearDown() override {}
|
// void TearDown() override {}
|
||||||
|
|
||||||
|
|
@ -70,7 +73,6 @@ QUERY(Color4, cat, "c!gw", false)
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
settingsCache = new SettingsCache;
|
settingsCache = new SettingsCache;
|
||||||
CardDatabaseManager::getInstance()->loadCardDatabases();
|
|
||||||
|
|
||||||
::testing::InitGoogleTest(&argc, argv);
|
::testing::InitGoogleTest(&argc, argv);
|
||||||
return RUN_ALL_TESTS();
|
return RUN_ALL_TESTS();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue