Cockatrice 2026-09-01-Development-3.1.0-beta.10
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
8
9#include <QBasicMutex>
10#include <QDate>
11#include <QHash>
12#include <QList>
13#include <QLoggingCategory>
14#include <QVector>
16#include <utility>
17
18inline Q_LOGGING_CATEGORY(CardDatabaseLog, "card_database");
19
29class CardDatabase : public QObject
30{
31 Q_OBJECT
32
33protected:
36
39
42
45
47
50
53
56
57private:
62
68
70 QBasicMutex *clearDatabaseMutex = new QBasicMutex(), *addCardMutex = new QBasicMutex(),
71 *removeCardMutex = new QBasicMutex();
72
73public:
81 explicit CardDatabase(QObject *parent = nullptr,
82 ICardPreferenceProvider *prefs = nullptr,
83 ICardDatabasePathProvider *pathProvider = nullptr,
85
87 ~CardDatabase() override;
88
93 void removeCard(const CardInfoPtr &card);
94
96 void clear();
97
99 [[nodiscard]] const CardNameMap &getCardList() const
100 {
101 return cards;
102 }
103
109 CardSetPtr getSet(const QString &setName);
110
112 [[nodiscard]] CardSetList getSetList() const;
113
115 [[nodiscard]] LoadStatus getLoadStatus() const
116 {
117 return loadStatus;
118 }
119
121 [[nodiscard]] CardDatabaseQuerier *query() const
122 {
123 return querier;
124 }
125
128
130 void markAllSetsAsKnown();
131
139 void notifyEnabledSetsChanged(bool recomputeCachedSets = true);
140
150 void checkUnknownSets();
151
156
157public slots:
162 void addCard(const CardInfoPtr &card);
163
168 void addSet(const CardSetPtr &set);
169
170 void addFormat(const FormatRulesPtr &format);
171
173 void loadCardDatabases();
175
180
189
190signals:
193
200
203
209 void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames);
210
213
216
219
222
223 friend class CardDatabaseLoader;
225};
226
227#endif // CARDDATABASE_H
Q_LOGGING_CATEGORY(CardDatabaseLog, "card_database")
LoadStatus
Represents the result of attempting to load a card database.
Definition card_database_loader.h:23
QSharedPointer< CardInfo > CardInfoPtr
Definition card_info.cpp:19
QHash< QString, FormatRulesPtr > FormatRulesNameMap
Definition card_info.h:33
QSharedPointer< FormatRules > FormatRulesPtr
Definition card_info.h:28
QSharedPointer< CardSet > CardSetPtr
Definition card_info.h:27
QHash< QString, CardSetPtr > SetNameMap
Definition card_info.h:32
QHash< QString, CardInfoPtr > CardNameMap
Definition card_info.h:31
LoadStatus getLoadStatus() const
Returns the current load status.
Definition card_database.h:115
SetNameMap sets
Sets indexed by short name.
Definition card_database.h:44
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:99
void reloadCardDatabasesAndNotify()
Definition card_database.cpp:69
bool saveCustomTokensToFile()
Saves custom tokens to file.
Definition card_database.cpp:83
QBasicMutex * addCardMutex
Definition card_database.h:70
void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames)
Emitted when new sets are found.
QBasicMutex * removeCardMutex
Definition card_database.h:71
void markAllSetsAsKnown()
Marks all sets as known.
Definition card_database.cpp:217
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:88
void enableAllUnknownSets()
Enables all unknown sets in the database.
Definition card_database.cpp:211
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.
Definition card_database.cpp:64
friend class CardDatabaseLoader
Definition card_database.h:223
void checkUnknownSets()
Check for sets that are unknown and emit signals if needed.
Definition card_database.cpp:187
CardSetList getSetList() const
Returns a list of all sets in the database.
Definition card_database.cpp:178
void addCard(const CardInfoPtr &card)
Adds a card to the database.
Definition card_database.cpp:111
void addFormat(const FormatRulesPtr &format)
Definition card_database.cpp:238
CardNameMap cards
Cards indexed by exact name.
Definition card_database.h:38
ICardSetPriorityController * setPriorityController
Controller to determine set priority when choosing preferred printings.
Definition card_database.h:35
void cardRemoved(CardInfoPtr card)
Emitted when a card is removed.
void clear()
Clears all cards, sets, and internal state.
Definition card_database.cpp:45
CardNameMap simpleNameCards
Cards indexed by simplified name (normalized).
Definition card_database.h:41
CardDatabaseQuerier * querier
Querier for higher-level card lookups.
Definition card_database.h:55
ICardSetPriorityController * getPriorityController()
Definition card_database.h:152
CardSetPtr getSet(const QString &setName)
Retrieves a set by short name, creating a new one if missing.
Definition card_database.cpp:167
void swapInDatabaseData(CardDatabaseData data)
Replaces the entire contents of the database with the provided snapshot in a single operation....
Definition card_database.cpp:243
void notifyEnabledSetsChanged(bool recomputeCachedSets=true)
Notifies listeners that enabled sets changed.
Definition card_database.cpp:223
void removeCard(const CardInfoPtr &card)
Removes a card from the database.
Definition card_database.cpp:137
LoadStatus loadStatus
Current load status of the database.
Definition card_database.h:52
friend class CardDatabaseQuerier
Definition card_database.h:224
~CardDatabase() override
Destructor clears all internal data.
Definition card_database.cpp:40
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:49
CardDatabase(QObject *parent=nullptr, ICardPreferenceProvider *prefs=nullptr, ICardDatabasePathProvider *pathProvider=nullptr, ICardSetPriorityController *setPriorityController=nullptr)
Constructs a new CardDatabase instance.
Definition card_database.cpp:15
void addSet(const CardSetPtr &set)
Adds a set to the database.
Definition card_database.cpp:162
void cardAdded(CardInfoPtr card)
Emitted when a new card is added.
FormatRulesNameMap formats
Definition card_database.h:46
QBasicMutex * clearDatabaseMutex
Mutexes for thread safety.
Definition card_database.h:70
CardDatabaseQuerier * query() const
Returns the querier for performing card lookups.
Definition card_database.h:121
A list-like container for CardSet objects with extended management methods.
Definition card_set_list.h:20
Definition interface_card_database_path_provider.h:6
Definition interface_card_preference_provider.h:7
Definition interface_card_set_priority_controller.h:7
Value type holding the full parsed state of a card database.
Definition card_database_data.h:17