Cockatrice 2026-10-19-Development-3.1.2-beta.2
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 <QByteArray>
6#include <QList>
7#include <QLoggingCategory>
8#include <QObject>
9#include <QString>
10#include <QStringList>
11#include <qtmetamacros.h>
12
15
16// IWYU pragma: keep
17// CardDatabaseData is passed by value to the databaseDataReady() signal, so the
18// moc-generated code needs the complete type.
19#include "card_database_data.h"
20
21inline Q_LOGGING_CATEGORY(CardDatabaseLoadingLog, "card_database.loading");
22inline Q_LOGGING_CATEGORY(CardDatabaseLoadingSuccessOrFailureLog, "card_database.loading.success_or_failure");
23
24class CardDatabase;
26
40
52class CardDatabaseLoader : public QObject
53{
54 Q_OBJECT
55public:
62 explicit CardDatabaseLoader(QObject *parent,
65 ICardSetPriorityController *_priorityController);
66
68 ~CardDatabaseLoader() override;
69
70public slots:
82 LoadStatus loadCardDatabases(bool ignoreCache = false);
83
90 LoadStatus loadCardDatabase(const QString &path, CardDatabaseData &data);
91
97
98signals:
101
104
107
113
119 void newSetsFound(int numSets, const QStringList &setNames);
120
123
124private:
131 LoadStatus loadFromFile(const QString &fileName, CardDatabaseData &data);
132
138 LoadStatus doLoadCardDatabases(bool ignoreCache);
139
144 [[nodiscard]] QStringList collectCustomDatabasePaths() const;
145
150 [[nodiscard]] QByteArray computeSourceHash(const QStringList &customPaths) const;
151
156 [[nodiscard]] QString cachePath() const;
157
164 bool loadFromCache(CardDatabaseData &data, const QByteArray &sourceHash);
165
172 bool saveToCache(const CardDatabaseData &data, const QByteArray &sourceHash);
173
174private:
179
180 QBasicMutex *loadFromFileMutex = new QBasicMutex();
181 QBasicMutex *reloadDatabaseMutex = new QBasicMutex();
182};
183
184#endif // COCKATRICE_CARD_DATABASE_LOADER_H
LoadStatus
Represents the result of attempting to load a card database.
Definition card_database_loader.h:32
@ Ok
Definition card_database_loader.h:33
@ FileError
Definition card_database_loader.h:37
@ NoCards
Definition card_database_loader.h:38
@ NotLoaded
Definition card_database_loader.h:36
@ VersionTooOld
Definition card_database_loader.h:34
@ Invalid
Definition card_database_loader.h:35
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:269
CardDatabase * database
Definition card_database_loader.h:175
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:178
ICardDatabasePathProvider * pathProvider
Definition card_database_loader.h:176
CardDatabaseLoader(QObject *parent, CardDatabase *db, ICardDatabasePathProvider *pathProvider, ICardSetPriorityController *_priorityController)
Constructs a CardDatabaseLoader.
Definition card_database_loader.cpp:33
LoadStatus doLoadCardDatabases(bool ignoreCache)
Performs the actual load work synchronously on the calling thread.
Definition card_database_loader.cpp:103
QByteArray computeSourceHash(const QStringList &customPaths) const
Computes a hash identifying the current set of input database files.
Definition card_database_loader.cpp:195
void allNewSetsEnabled()
Emitted when all newly discovered sets have been enabled.
ICardSetPriorityController * priorityController
Definition card_database_loader.h:177
LoadStatus loadCardDatabases(bool ignoreCache=false)
Loads all configured card databases.
Definition card_database_loader.cpp:98
LoadStatus loadFromFile(const QString &fileName, CardDatabaseData &data)
Parses a single file into the given snapshot using the available parsers.
Definition card_database_loader.cpp:62
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:81
QStringList collectCustomDatabasePaths() const
Collects custom card database paths recursively.
Definition card_database_loader.cpp:256
QBasicMutex * loadFromFileMutex
Definition card_database_loader.h:180
bool loadFromCache(CardDatabaseData &data, const QByteArray &sourceHash)
Attempts to populate the snapshot from the binary cache.
Definition card_database_loader.cpp:240
QString cachePath() const
Path of the binary cache file derived from the main card database path.
Definition card_database_loader.cpp:190
bool saveToCache(const CardDatabaseData &data, const QByteArray &sourceHash)
Writes the snapshot to the binary cache for the current inputs.
Definition card_database_loader.cpp:248
QBasicMutex * reloadDatabaseMutex
Definition card_database_loader.h:181
Core in-memory container for card and set data.
Definition card_database.h:38
Defines the base parser interface (ICardDatabaseParser) for all card database parsers.
Definition card_database_parser.h:28
Definition interface_card_database_path_provider.h:6
Definition interface_card_set_priority_controller.h:8
Definition remote_connection_controller.h:20
CardDatabase * db
Q_LOGGING_CATEGORY(CrashReportLog, "crash_report")
Value type holding the full parsed state of a card database.
Definition card_database_data.h:17