Cockatrice 2026-09-01-Development-3.1.0-beta.10
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
card_database_loader.h
Go to the documentation of this file.
1#ifndef COCKATRICE_CARD_DATABASE_LOADER_H
2#define COCKATRICE_CARD_DATABASE_LOADER_H
3
4#include <QBasicMutex>
5#include <QList>
6#include <QLoggingCategory>
11
12inline Q_LOGGING_CATEGORY(CardDatabaseLoadingLog, "card_database.loading");
13inline Q_LOGGING_CATEGORY(CardDatabaseLoadingSuccessOrFailureLog, "card_database.loading.success_or_failure");
14
15class CardDatabase;
17
31
43class CardDatabaseLoader : public QObject
44{
45 Q_OBJECT
46public:
54 explicit CardDatabaseLoader(QObject *parent,
57 ICardPreferenceProvider *preferenceProvider,
58 ICardSetPriorityController *_priorityController);
59
61 ~CardDatabaseLoader() override;
62
63public slots:
72
79 LoadStatus loadCardDatabase(const QString &path, CardDatabaseData &data);
80
86
87signals:
90
93
96
102
108 void newSetsFound(int numSets, const QStringList &setNames);
109
112
113private:
120 LoadStatus loadFromFile(const QString &fileName, CardDatabaseData &data);
121
127
132 [[nodiscard]] QStringList collectCustomDatabasePaths() const;
133
138 [[nodiscard]] QByteArray computeSourceHash(const QStringList &customPaths) const;
139
144 [[nodiscard]] QString cachePath() const;
145
152 bool loadFromCache(CardDatabaseData &data, const QByteArray &sourceHash);
153
160 bool saveToCache(const CardDatabaseData &data, const QByteArray &sourceHash);
161
162private:
166 QList<ICardDatabaseParser *> availableParsers;
167
168 QBasicMutex *loadFromFileMutex = new QBasicMutex();
169 QBasicMutex *reloadDatabaseMutex = new QBasicMutex();
170 bool initialLoadComplete = false;
171};
172
173#endif // COCKATRICE_CARD_DATABASE_LOADER_H
Q_LOGGING_CATEGORY(CardDatabaseLoadingLog, "card_database.loading")
LoadStatus
Represents the result of attempting to load a card database.
Definition card_database_loader.h:23
@ Ok
Definition card_database_loader.h:24
@ FileError
Definition card_database_loader.h:28
@ NoCards
Definition card_database_loader.h:29
@ NotLoaded
Definition card_database_loader.h:27
@ VersionTooOld
Definition card_database_loader.h:25
@ Invalid
Definition card_database_loader.h:26
void loadingFailed()
Emitted when loading fails.
void loadingFinished()
Emitted when loading finishes successfully.
void loadingStarted()
Emitted when loading starts.
bool saveCustomTokensToFile()
Saves custom tokens to the user-defined custom database path.
Definition card_database_loader.cpp:215
CardDatabase * database
Definition card_database_loader.h:163
void databaseDataReady(CardDatabaseData data)
Emitted with the fully-built snapshot once background loading completes. The receiver swaps it into t...
QList< ICardDatabaseParser * > availableParsers
Definition card_database_loader.h:166
ICardDatabasePathProvider * pathProvider
Definition card_database_loader.h:164
bool initialLoadComplete
Definition card_database_loader.h:170
QByteArray computeSourceHash(const QStringList &customPaths) const
Computes a hash identifying the current set of input database files.
Definition card_database_loader.cpp:158
void allNewSetsEnabled()
Emitted when all newly discovered sets have been enabled.
CardDatabaseLoader(QObject *parent, CardDatabase *db, ICardDatabasePathProvider *pathProvider, ICardPreferenceProvider *preferenceProvider, ICardSetPriorityController *_priorityController)
Constructs a CardDatabaseLoader.
Definition card_database_loader.cpp:18
ICardSetPriorityController * priorityController
Definition card_database_loader.h:165
LoadStatus loadFromFile(const QString &fileName, CardDatabaseData &data)
Parses a single file into the given snapshot using the available parsers.
Definition card_database_loader.cpp:43
void newSetsFound(int numSets, const QStringList &setNames)
Emitted when new sets are discovered during loading.
LoadStatus loadCardDatabase(const QString &path, CardDatabaseData &data)
Loads a single card database file into the given snapshot.
Definition card_database_loader.cpp:62
QStringList collectCustomDatabasePaths() const
Collects custom card database paths recursively.
Definition card_database_loader.cpp:202
LoadStatus loadCardDatabases()
Loads all configured card databases.
Definition card_database_loader.cpp:79
QBasicMutex * loadFromFileMutex
Definition card_database_loader.h:168
bool loadFromCache(CardDatabaseData &data, const QByteArray &sourceHash)
Attempts to populate the snapshot from the binary cache.
Definition card_database_loader.cpp:186
~CardDatabaseLoader() override
Destructor cleans up allocated parsers.
Definition card_database_loader.cpp:37
QString cachePath() const
Path of the binary cache file derived from the main card database path.
Definition card_database_loader.cpp:153
LoadStatus doLoadCardDatabases()
Performs the actual load work synchronously on the calling thread.
Definition card_database_loader.cpp:84
bool saveToCache(const CardDatabaseData &data, const QByteArray &sourceHash)
Writes the snapshot to the binary cache for the current inputs.
Definition card_database_loader.cpp:194
QBasicMutex * reloadDatabaseMutex
Definition card_database_loader.h:169
Core in-memory container for card and set data.
Definition card_database.h:30
Defines the base parser interface (ICardDatabaseParser) for all card database parsers.
Definition card_database_parser.h:21
Definition interface_card_database_path_provider.h:6
Definition interface_card_preference_provider.h:7
Definition interface_card_set_priority_controller.h:7
CardDatabase * db
Value type holding the full parsed state of a card database.
Definition card_database_data.h:17