Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
card_database.h
Go to the documentation of this file.
1#ifndef CARDDATABASE_H
2#define CARDDATABASE_H
3
6
7// IWYU pragma: keep
8// CardDatabaseData is passed by value to the swapInDatabaseData() slot, and
9// CardInfoPtr is passed by value to the cardAdded()/cardRemoved() signals, so
10// the moc-generated code needs the complete types.
11#include "card_database_data.h"
13
14#include <QBasicMutex>
15#include <QLoggingCategory>
16#include <QObject>
17#include <QString>
18#include <QStringList>
19#include <qtmetamacros.h>
20
25
26inline Q_LOGGING_CATEGORY(CardDatabaseLog, "card_database");
27
37class CardDatabase : public QObject
38{
39 Q_OBJECT
40
41protected:
44
47
50
53
55
58
61
64
65private:
70
76
78 QBasicMutex *clearDatabaseMutex = new QBasicMutex(), *addCardMutex = new QBasicMutex(),
79 *removeCardMutex = new QBasicMutex();
80
81public:
89 explicit CardDatabase(QObject *parent = nullptr,
90 ICardPreferenceProvider *prefs = nullptr,
91 ICardDatabasePathProvider *pathProvider = nullptr,
93
95 ~CardDatabase() override;
96
101 void removeCard(const CardInfoPtr &card);
102
104 void clear();
105
107 [[nodiscard]] const CardNameMap &getCardList() const
108 {
109 return cards;
110 }
111
117 CardSetPtr getSet(const QString &setName);
118
120 [[nodiscard]] CardSetList getSetList() const;
121
123 [[nodiscard]] LoadStatus getLoadStatus() const
124 {
125 return loadStatus;
126 }
127
129 [[nodiscard]] CardDatabaseQuerier *query() const
130 {
131 return querier;
132 }
133
136
138 void markAllSetsAsKnown();
139
147 void notifyEnabledSetsChanged(bool recomputeCachedSets = true);
148
158 void checkUnknownSets();
159
164
165public slots:
170 void addCard(const CardInfoPtr &card);
171
176 void addSet(const CardSetPtr &set);
177
178 void addFormat(const FormatRulesPtr &format);
179
181 void loadCardDatabases();
187
192
201
202signals:
205
212
215
221 void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames);
222
225
228
231
234
235 friend class CardDatabaseLoader;
237};
238
239#endif // CARDDATABASE_H
LoadStatus
Represents the result of attempting to load a card database.
Definition card_database_loader.h:32
QSharedPointer< CardInfo > CardInfoPtr
Definition card_info.cpp:15
QHash< QString, FormatRulesPtr > FormatRulesNameMap
Definition card_info.h:36
QSharedPointer< FormatRules > FormatRulesPtr
Definition card_info.h:31
QSharedPointer< CardSet > CardSetPtr
Definition card_info.h:30
QHash< QString, CardSetPtr > SetNameMap
Definition card_info.h:35
QHash< QString, CardInfoPtr > CardNameMap
Definition card_info.h:34
Provides lookup and convenience functions for querying cards and their printings.
Definition card_database_querier.h:29
LoadStatus getLoadStatus() const
Returns the current load status.
Definition card_database.h:123
SetNameMap sets
Sets indexed by short name.
Definition card_database.h:52
void cardDatabaseAllNewSetsEnabled()
Emitted when all new sets have been enabled.
const CardNameMap & getCardList() const
Returns the map of cards by name.
Definition card_database.h:107
void reloadCardDatabasesAndNotify()
Reloads card databases from disk, bypassing the binary cache, and notifies observers of the fresh sta...
Definition card_database.cpp:80
bool saveCustomTokensToFile()
Saves custom tokens to file.
Definition card_database.cpp:98
QBasicMutex * addCardMutex
Definition card_database.h:78
void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames)
Emitted when new sets are found.
QBasicMutex * removeCardMutex
Definition card_database.h:79
void markAllSetsAsKnown()
Marks all sets as known.
Definition card_database.cpp:236
void cardDatabaseLoadingFinished()
Emitted when the card database has finished loading successfully.
void refreshCachedReverseRelatedCards()
Refreshes the cached reverse-related cards for all cards.
Definition card_database.cpp:103
void enableAllUnknownSets()
Enables all unknown sets in the database.
Definition card_database.cpp:230
void cardDatabaseLoadingFailed()
Emitted when the card database fails to load.
void cardDatabaseEnabledSetsChanged()
Emitted when enabled sets have changed.
void loadCardDatabases()
Loads card databases from configured paths, using the binary cache when valid.
Definition card_database.cpp:75
friend class CardDatabaseLoader
Definition card_database.h:235
void checkUnknownSets()
Check for sets that are unknown and emit signals if needed.
Definition card_database.cpp:202
CardSetList getSetList() const
Returns a list of all sets in the database.
Definition card_database.cpp:193
void addCard(const CardInfoPtr &card)
Adds a card to the database.
Definition card_database.cpp:126
void addFormat(const FormatRulesPtr &format)
Definition card_database.cpp:257
CardNameMap cards
Cards indexed by exact name.
Definition card_database.h:46
ICardSetPriorityController * setPriorityController
Controller to determine set priority when choosing preferred printings.
Definition card_database.h:43
void cardRemoved(CardInfoPtr card)
Emitted when a card is removed.
void clear()
Clears all cards, sets, and internal state.
Definition card_database.cpp:56
CardNameMap simpleNameCards
Cards indexed by simplified name (normalized).
Definition card_database.h:49
CardDatabaseQuerier * querier
Querier for higher-level card lookups.
Definition card_database.h:63
ICardSetPriorityController * getPriorityController()
Definition card_database.h:160
CardSetPtr getSet(const QString &setName)
Retrieves a set by short name, creating a new one if missing.
Definition card_database.cpp:182
void swapInDatabaseData(CardDatabaseData data)
Replaces the entire contents of the database with the provided snapshot in a single operation....
Definition card_database.cpp:262
void notifyEnabledSetsChanged(bool recomputeCachedSets=true)
Notifies listeners that enabled sets changed.
Definition card_database.cpp:242
void removeCard(const CardInfoPtr &card)
Removes a card from the database.
Definition card_database.cpp:152
LoadStatus loadStatus
Current load status of the database.
Definition card_database.h:60
friend class CardDatabaseQuerier
Definition card_database.h:236
void cardDatabaseReset()
Emitted once after the live database contents have been replaced by a freshly loaded snapshot....
CardDatabaseLoader * loader
Loader responsible for file discovery and parsing.
Definition card_database.h:57
CardDatabase(QObject *parent=nullptr, ICardPreferenceProvider *prefs=nullptr, ICardDatabasePathProvider *pathProvider=nullptr, ICardSetPriorityController *setPriorityController=nullptr)
Constructs a new CardDatabase instance.
Definition card_database.cpp:26
void addSet(const CardSetPtr &set)
Adds a set to the database.
Definition card_database.cpp:177
void cardAdded(CardInfoPtr card)
Emitted when a new card is added.
FormatRulesNameMap formats
Definition card_database.h:54
QBasicMutex * clearDatabaseMutex
Mutexes for thread safety.
Definition card_database.h:78
CardDatabaseQuerier * query() const
Returns the querier for performing card lookups.
Definition card_database.h:129
A list-like container for CardSet objects with extended management methods.
Definition card_set_list.h:22
Definition interface_card_database_path_provider.h:6
Definition interface_card_preference_provider.h:7
Definition interface_card_set_priority_controller.h:8
Q_LOGGING_CATEGORY(CrashReportLog, "crash_report")
Value type holding the full parsed state of a card database.
Definition card_database_data.h:17