Cockatrice 2026-09-01-Development-3.1.0-beta.10
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
card_database_querier.h
Go to the documentation of this file.
1#ifndef COCKATRICE_CARD_DATABASE_QUERIER_H
2#define COCKATRICE_CARD_DATABASE_QUERIER_H
3
4#include "../card_info.h"
6
7#include <QObject>
10
11class CardDatabase;
12
22class CardDatabaseQuerier : public QObject
23{
24 Q_OBJECT
25
26public:
34 explicit CardDatabaseQuerier(QObject *parent, const CardDatabase *db, const ICardPreferenceProvider *prefs);
35
42 [[nodiscard]] CardInfoPtr getCardInfo(const QString &cardName) const;
43
52 [[nodiscard]] QList<CardInfoPtr> getCardInfos(const QStringList &cardNames) const;
53
62 [[nodiscard]] CardInfoPtr getCardBySimpleName(const QString &cardName) const;
63
70 [[nodiscard]] CardInfoPtr lookupCardByName(const QString &name) const;
71
81 [[nodiscard]] ExactCard getCard(const CardRef &cardRef) const;
82
91 [[nodiscard]] QList<ExactCard> getCards(const QList<CardRef> &cardRefs) const;
92
101 [[nodiscard]] ExactCard guessCard(const CardRef &cardRef) const;
102
108 [[nodiscard]] ExactCard getRandomCard() const;
109
119 [[nodiscard]] ExactCard getCardFromSameSet(const QString &cardName, const PrintingInfo &otherPrinting) const;
120
127 [[nodiscard]] ExactCard getPreferredCard(const QString &cardName) const;
128
135 [[nodiscard]] ExactCard getPreferredCard(const CardInfoPtr &cardInfo) const;
136
143 [[nodiscard]] bool isPreferredPrinting(const CardRef &cardRef) const;
144
151 [[nodiscard]] PrintingInfo getPreferredPrinting(const QString &cardName) const;
152
159 [[nodiscard]] PrintingInfo getPreferredPrinting(const CardInfoPtr &cardInfo) const;
160
167 [[nodiscard]] QString getPreferredPrintingProviderId(const QString &cardName) const;
168
175 [[nodiscard]] PrintingInfo getSpecificPrinting(const CardRef &cardRef) const;
176
185 [[nodiscard]] PrintingInfo
186 getSpecificPrinting(const QString &cardName, const QString &setCode, const QString &collectorNumber) const;
187
195 [[nodiscard]] PrintingInfo findPrintingWithId(const CardInfoPtr &card, const QString &providerId) const;
196
202 [[nodiscard]] QStringList getAllMainCardTypes() const;
203
209 [[nodiscard]] QMap<QString, int> getAllMainCardTypesWithCount() const;
210
216 [[nodiscard]] QMap<QString, int> getAllSubCardTypesWithCount() const;
217 FormatRulesPtr getFormat(const QString &formatName) const;
218 QMap<QString, int> getAllFormatsWithCount() const;
219
220private:
223
224 // Count maps are expensive to compute (they iterate the whole database) and are
225 // queried every time a filter widget is built, so cache them and invalidate on
226 // any database mutation. Only the main thread reads or writes these.
227 mutable QMap<QString, int> mainCardTypeCountsCache;
228 mutable QMap<QString, int> subCardTypeCountsCache;
229 mutable QMap<QString, int> formatsCountCache;
230
231private slots:
232 void invalidateCaches();
233};
234
235#endif // COCKATRICE_CARD_DATABASE_QUERIER_H
QSharedPointer< CardInfo > CardInfoPtr
Definition card_info.cpp:19
QSharedPointer< FormatRules > FormatRulesPtr
Definition card_info.h:28
bool isPreferredPrinting(const CardRef &cardRef) const
Checks whether the CardRef refers to the preferred printing.
Definition card_database_querier.cpp:248
QMap< QString, int > getAllMainCardTypesWithCount() const
Returns a mapping of main card types to their occurrence counts.
Definition card_database_querier.cpp:321
PrintingInfo findPrintingWithId(const CardInfoPtr &card, const QString &providerId) const
Searches for a printing that matches a given providerId.
Definition card_database_querier.cpp:171
PrintingInfo getPreferredPrinting(const QString &cardName) const
Returns the preferred printing for the given card name.
Definition card_database_querier.cpp:257
const ICardPreferenceProvider * prefs
Preference provider for preferred printings.
Definition card_database_querier.h:222
QMap< QString, int > getAllFormatsWithCount() const
Definition card_database_querier.cpp:362
QString getPreferredPrintingProviderId(const QString &cardName) const
Returns the providerId of the preferred printing.
Definition card_database_querier.cpp:301
QMap< QString, int > mainCardTypeCountsCache
Definition card_database_querier.h:227
const CardDatabase * db
Card database used for all lookups.
Definition card_database_querier.h:221
ExactCard getRandomCard() const
Returns a random card from the database using the preferred printing.
Definition card_database_querier.cpp:135
QList< ExactCard > getCards(const QList< CardRef > &cardRefs) const
Resolves multiple CardRefs into ExactCards.
Definition card_database_querier.cpp:83
ExactCard getCard(const CardRef &cardRef) const
Converts a CardRef into an ExactCard.
Definition card_database_querier.cpp:104
CardInfoPtr lookupCardByName(const QString &name) const
Looks up a card using exact name first, then simplified matching as fallback.
Definition card_database_querier.cpp:63
PrintingInfo getSpecificPrinting(const CardRef &cardRef) const
Retrieves a specific printing referenced by CardRef.
Definition card_database_querier.cpp:184
ExactCard guessCard(const CardRef &cardRef) const
Attempts a more flexible card lookup using both simple name matching and CardRef rules.
Definition card_database_querier.cpp:126
ExactCard getCardFromSameSet(const QString &cardName, const PrintingInfo &otherPrinting) const
Returns a printing of a card from the same set as another given printing when possible.
Definition card_database_querier.cpp:149
QList< CardInfoPtr > getCardInfos(const QStringList &cardNames) const
Retrieves multiple cards by their exact names.
Definition card_database_querier.cpp:45
QMap< QString, int > formatsCountCache
Definition card_database_querier.h:229
CardInfoPtr getCardBySimpleName(const QString &cardName) const
Retrieves a card using simplified name matching.
Definition card_database_querier.cpp:58
CardInfoPtr getCardInfo(const QString &cardName) const
Retrieves a card by its exact name.
Definition card_database_querier.cpp:34
QMap< QString, int > getAllSubCardTypesWithCount() const
Returns a mapping of card subtypes to their occurrence counts.
Definition card_database_querier.cpp:336
CardDatabaseQuerier(QObject *parent, const CardDatabase *db, const ICardPreferenceProvider *prefs)
Constructs a CardDatabaseQuerier.
Definition card_database_querier.cpp:10
QStringList getAllMainCardTypes() const
Returns a list of all main card types present in the database.
Definition card_database_querier.cpp:316
QMap< QString, int > subCardTypeCountsCache
Definition card_database_querier.h:228
FormatRulesPtr getFormat(const QString &formatName) const
Definition card_database_querier.cpp:357
void invalidateCaches()
Definition card_database_querier.cpp:21
ExactCard getPreferredCard(const QString &cardName) const
Returns the preferred printing of a card based on user preferences and set priority.
Definition card_database_querier.cpp:232
Core in-memory container for card and set data.
Definition card_database.h:30
Represents a specific card instance, defined by its CardInfo and a particular printing.
Definition exact_card.h:19
Definition interface_card_preference_provider.h:7
Represents metadata for a specific variation of a card within a set.
Definition printing_info.h:28
Definition card_ref.h:14