[Card DB] Properly pass along set priority controller to parsers

Took 16 minutes

Took 35 seconds
This commit is contained in:
Lukas Brübach 2025-12-16 13:54:04 +01:00
parent d47dc35885
commit bd04289552
9 changed files with 26 additions and 10 deletions

View file

@ -21,7 +21,7 @@ CardDatabase::CardDatabase(QObject *parent,
qRegisterMetaType<CardInfoPtr>("CardSetPtr"); qRegisterMetaType<CardInfoPtr>("CardSetPtr");
// create loader and wire it up // create loader and wire it up
loader = new CardDatabaseLoader(this, this, pathProvider, prefs); loader = new CardDatabaseLoader(this, this, pathProvider, prefs, setPriorityController);
// re-emit loader signals (so other code doesn't need to know about internals) // re-emit loader signals (so other code doesn't need to know about internals)
connect(loader, &CardDatabaseLoader::loadingFinished, this, &CardDatabase::cardDatabaseLoadingFinished); connect(loader, &CardDatabaseLoader::loadingFinished, this, &CardDatabase::cardDatabaseLoadingFinished);
connect(loader, &CardDatabaseLoader::loadingFailed, this, &CardDatabase::cardDatabaseLoadingFailed); connect(loader, &CardDatabaseLoader::loadingFailed, this, &CardDatabase::cardDatabaseLoadingFailed);

View file

@ -12,12 +12,13 @@
CardDatabaseLoader::CardDatabaseLoader(QObject *parent, CardDatabaseLoader::CardDatabaseLoader(QObject *parent,
CardDatabase *db, CardDatabase *db,
ICardDatabasePathProvider *_pathProvider, ICardDatabasePathProvider *_pathProvider,
ICardPreferenceProvider *_preferenceProvider) ICardPreferenceProvider *_preferenceProvider,
ICardSetPriorityController *_priorityController)
: QObject(parent), database(db), pathProvider(_pathProvider) : QObject(parent), database(db), pathProvider(_pathProvider)
{ {
// instantiate available parsers here and connect them to the database // instantiate available parsers here and connect them to the database
availableParsers << new CockatriceXml4Parser(_preferenceProvider); availableParsers << new CockatriceXml4Parser(_preferenceProvider, _priorityController);
availableParsers << new CockatriceXml3Parser; availableParsers << new CockatriceXml3Parser(_priorityController);
for (auto *p : availableParsers) { for (auto *p : availableParsers) {
// connect parser outputs to the database adders // connect parser outputs to the database adders

View file

@ -6,6 +6,7 @@
#include <QLoggingCategory> #include <QLoggingCategory>
#include <libcockatrice/interfaces/interface_card_database_path_provider.h> #include <libcockatrice/interfaces/interface_card_database_path_provider.h>
#include <libcockatrice/interfaces/interface_card_preference_provider.h> #include <libcockatrice/interfaces/interface_card_preference_provider.h>
#include <libcockatrice/interfaces/interface_card_set_priority_controller.h>
inline Q_LOGGING_CATEGORY(CardDatabaseLoadingLog, "card_database.loading"); inline Q_LOGGING_CATEGORY(CardDatabaseLoadingLog, "card_database.loading");
inline Q_LOGGING_CATEGORY(CardDatabaseLoadingSuccessOrFailureLog, "card_database.loading.success_or_failure"); inline Q_LOGGING_CATEGORY(CardDatabaseLoadingSuccessOrFailureLog, "card_database.loading.success_or_failure");
@ -52,7 +53,8 @@ public:
explicit CardDatabaseLoader(QObject *parent, explicit CardDatabaseLoader(QObject *parent,
CardDatabase *db, CardDatabase *db,
ICardDatabasePathProvider *pathProvider, ICardDatabasePathProvider *pathProvider,
ICardPreferenceProvider *preferenceProvider); ICardPreferenceProvider *preferenceProvider,
ICardSetPriorityController *_priorityController);
/** @brief Destructor cleans up allocated parsers. */ /** @brief Destructor cleans up allocated parsers. */
~CardDatabaseLoader() override; ~CardDatabaseLoader() override;

View file

@ -4,6 +4,10 @@
SetNameMap ICardDatabaseParser::sets; SetNameMap ICardDatabaseParser::sets;
ICardDatabaseParser::ICardDatabaseParser(ICardSetPriorityController *_cardSetPriorityController)
: cardSetPriorityController(_cardSetPriorityController)
{
}
void ICardDatabaseParser::clearSetlist() void ICardDatabaseParser::clearSetlist()
{ {
sets.clear(); sets.clear();
@ -19,7 +23,7 @@ CardSetPtr ICardDatabaseParser::internalAddSet(const QString &setName,
return sets.value(setName); return sets.value(setName);
} }
CardSetPtr newSet = CardSet::newInstance(new NoopCardSetPriorityController(), setName); CardSetPtr newSet = CardSet::newInstance(cardSetPriorityController, setName);
newSet->setLongName(longName); newSet->setLongName(longName);
newSet->setSetType(setType); newSet->setSetType(setType);
newSet->setReleaseDate(releaseDate); newSet->setReleaseDate(releaseDate);

View file

@ -20,6 +20,7 @@ class ICardDatabaseParser : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
ICardDatabaseParser(ICardSetPriorityController *cardSetPriorityController);
~ICardDatabaseParser() override = default; ~ICardDatabaseParser() override = default;
/** /**
@ -59,6 +60,7 @@ public:
protected: protected:
/** @brief Cached global list of sets shared between all parsers. */ /** @brief Cached global list of sets shared between all parsers. */
static SetNameMap sets; static SetNameMap sets;
ICardSetPriorityController *cardSetPriorityController;
/** /**
* @brief Internal helper to add a set to the global set cache. * @brief Internal helper to add a set to the global set cache.

View file

@ -14,6 +14,11 @@
#define COCKATRICE_XML3_SCHEMALOCATION \ #define COCKATRICE_XML3_SCHEMALOCATION \
"https://raw.githubusercontent.com/Cockatrice/Cockatrice/master/doc/carddatabase_v3/cards.xsd" "https://raw.githubusercontent.com/Cockatrice/Cockatrice/master/doc/carddatabase_v3/cards.xsd"
CockatriceXml3Parser::CockatriceXml3Parser(ICardSetPriorityController *_cardSetPriorityController)
: ICardDatabaseParser(_cardSetPriorityController)
{
}
bool CockatriceXml3Parser::getCanParseFile(const QString &fileName, QIODevice &device) bool CockatriceXml3Parser::getCanParseFile(const QString &fileName, QIODevice &device)
{ {
qCInfo(CockatriceXml3Log) << "Trying to parse: " << fileName; qCInfo(CockatriceXml3Log) << "Trying to parse: " << fileName;

View file

@ -26,7 +26,7 @@ class CockatriceXml3Parser : public ICardDatabaseParser
{ {
Q_OBJECT Q_OBJECT
public: public:
CockatriceXml3Parser() = default; CockatriceXml3Parser(ICardSetPriorityController *cardSetPriorityController);
~CockatriceXml3Parser() override = default; ~CockatriceXml3Parser() override = default;
/** /**

View file

@ -14,8 +14,9 @@
#define COCKATRICE_XML4_SCHEMALOCATION \ #define COCKATRICE_XML4_SCHEMALOCATION \
"https://raw.githubusercontent.com/Cockatrice/Cockatrice/master/doc/carddatabase_v4/cards.xsd" "https://raw.githubusercontent.com/Cockatrice/Cockatrice/master/doc/carddatabase_v4/cards.xsd"
CockatriceXml4Parser::CockatriceXml4Parser(ICardPreferenceProvider *_cardPreferenceProvider) CockatriceXml4Parser::CockatriceXml4Parser(ICardPreferenceProvider *_cardPreferenceProvider,
: cardPreferenceProvider(_cardPreferenceProvider) ICardSetPriorityController *_cardSetPriorityController)
: ICardDatabaseParser(_cardSetPriorityController), cardPreferenceProvider(_cardPreferenceProvider)
{ {
} }

View file

@ -29,7 +29,8 @@ class CockatriceXml4Parser : public ICardDatabaseParser
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit CockatriceXml4Parser(ICardPreferenceProvider *cardPreferenceProvider); explicit CockatriceXml4Parser(ICardPreferenceProvider *cardPreferenceProvider,
ICardSetPriorityController *cardSetPriorityController);
~CockatriceXml4Parser() override = default; ~CockatriceXml4Parser() override = default;
/** /**