Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
oracleimporter.h
Go to the documentation of this file.
1#ifndef ORACLEIMPORTER_H
2#define ORACLEIMPORTER_H
3
6#include "raw_json_scanner.h"
7
8#include <QAtomicInt>
9#include <QByteArray>
10#include <QDate>
11#include <QHash>
12#include <QJsonArray>
13#include <QJsonObject>
14#include <QList>
15#include <QMap>
16#include <QObject>
17#include <QString>
18#include <QStringList>
20#include <qnamespace.h>
21#include <qtmetamacros.h>
22#include <utility>
23
24class CardRelation;
25class QRegularExpression;
26
27// many users prefer not to see these sets with non english arts
28// they will given priority PriorityLowest
29const QStringList nonEnglishSets = {"4BB", "FBB", "PS11", "PSAL", "REN", "RIN"};
32 {"expansion", CardSet::PriorityPrimary},
33
34 {"commander", CardSet::PrioritySecondary},
35 {"starter", CardSet::PrioritySecondary},
36 {"draft_innovation", CardSet::PrioritySecondary},
37 {"duel_deck", CardSet::PrioritySecondary},
38
39 {"archenemy", CardSet::PriorityReprint},
40 {"arsenal", CardSet::PriorityReprint},
42 {"eternal", CardSet::PriorityReprint},
43 {"from_the_vault", CardSet::PriorityReprint},
44 {"masterpiece", CardSet::PriorityReprint},
45 {"masters", CardSet::PriorityReprint},
46 {"memorabilia", CardSet::PriorityReprint},
47 {"planechase", CardSet::PriorityReprint},
48 {"premium_deck", CardSet::PriorityReprint},
49 {"promo", CardSet::PriorityReprint},
50 {"spellbook", CardSet::PriorityReprint},
51 {"token", CardSet::PriorityReprint},
52 {"treasure_chest", CardSet::PriorityReprint},
53
54 {"alchemy", CardSet::PriorityOther},
55 {"funny", CardSet::PriorityOther},
56 {"minigame", CardSet::PriorityOther},
57 {"vanguard", CardSet::PriorityOther},
58};
59
61{
62private:
65 QString setType;
67 // Byte range of this set's object within the importer's raw JSON text. Parsing
68 // one set at a time keeps peak memory low instead of holding the whole document.
70
71public:
72 const QString &getShortName() const
73 {
74 return shortName;
75 }
76 const QString &getLongName() const
77 {
78 return longName;
79 }
80 const QString &getSetType() const
81 {
82 return setType;
83 }
84 const QDate &getReleaseDate() const
85 {
86 return releaseDate;
87 }
89 {
90 return priority;
91 }
93 {
94 return rawRange;
95 }
96 SetToDownload(QString _shortName,
97 QString _longName,
98 CardSet::Priority _priority,
99 QString _setType = QString(),
100 const QDate &_releaseDate = QDate())
101 : shortName(std::move(_shortName)), longName(std::move(_longName)), releaseDate(_releaseDate),
102 setType(std::move(_setType)), priority(_priority)
103 {
104 }
105 void setRawRange(const RawJson::SetDataRange &_rawRange)
106 {
107 rawRange = _rawRange;
108 }
109 bool operator<(const SetToDownload &set) const
110 {
111 return longName.compare(set.longName, Qt::CaseInsensitive) < 0;
112 }
113};
114
116{
117public:
118 SplitCardPart(const QString &_name,
119 const QString &_text,
120 const QHash<QString, QString> &_properties,
121 const PrintingInfo &_printingInfo,
122 const QString &_localizedText = QString());
123 inline const QString &getName() const
124 {
125 return name;
126 }
127 inline const QString &getText() const
128 {
129 return text;
130 }
131
134 inline const QString &getLocalizedText() const
135 {
136 return localizedText;
137 }
139 {
140 return properties;
141 }
142 inline const PrintingInfo &getPrintingInfo() const
143 {
144 return printingInfo;
145 }
146
147private:
148 QString name;
149 QString text;
153};
154
161
162class OracleImporter : public QObject
163{
164 Q_OBJECT
165private:
166 static const QRegularExpression formatRegex;
167
172
177
179
184 QByteArray rawSetsData;
185
193 bool progressReporting = true;
194
200 QAtomicInt importCancelled;
201
205 QString cardLang = "en";
206
212
219
228
229 CardInfoPtr addCard(QString name,
230 const QString &text,
231 bool isToken,
232 QHash<QString, QString> properties,
233 const QList<CardRelation *> &relatedCards,
234 const PrintingInfo &printingInfo);
235
245 void collectForeignData(const QString &cardKey,
246 const CardSetPtr &currentSet,
247 const QJsonObject &card,
248 bool collectText = true);
249signals:
250 void setIndexChanged(int cardsImported, int setIndex, const QString &setName);
251 void dataReadProgress(int bytesRead, int totalBytes);
252
253public:
254 explicit OracleImporter(QObject *parent = nullptr);
263 void setProgressReporting(bool enabled)
264 {
265 progressReporting = enabled;
266 }
267
271 void setCardLang(const QString &lang);
272 const QString &getCardLang() const
273 {
274 return cardLang;
275 }
276
280 bool readSetsFromByteArray(QByteArray data);
281 int startImport();
290 {
291 importCancelled.storeRelease(1);
292 }
293
298 void applyLocalizedData();
299 bool saveToFile(const QString &fileName, const QString &sourceUrl, const QString &sourceVersion);
300 int importCardsFromSet(const CardSetPtr &currentSet, const QJsonArray &cardsList);
306 {
307 return cards;
308 }
310 {
311 return allSets;
312 }
313 const QByteArray &getRawSetsData() const
314 {
315 return rawSetsData;
316 }
317 void releaseSetData();
318 void clear();
319};
320
321#endif
QSharedPointer< CardInfo > CardInfoPtr
Definition card_info.cpp:15
QHash< QString, FormatRulesPtr > FormatRulesNameMap
Definition card_info.h:36
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
Represents a relationship between two cards.
Definition card_relation.h:25
Priority
Defines relative ordering and importance of sets.
Definition card_set.h:44
@ PriorityPrimary
Primary, canonical set.
Definition card_set.h:46
@ PriorityReprint
Duplicate or reprint category.
Definition card_set.h:48
@ PrioritySecondary
Secondary but relevant.
Definition card_set.h:47
@ PriorityLowest
Lowest sorting priority.
Definition card_set.h:50
@ PriorityOther
Miscellaneous grouping.
Definition card_set.h:49
static const QRegularExpression formatRegex
Definition oracleimporter.h:166
void cancelImport()
Requests an in-flight startImport() to stop at the next set boundary.
Definition oracleimporter.h:289
bool progressReporting
Definition oracleimporter.h:193
QString cardLang
Definition oracleimporter.h:205
const FormatRulesNameMap & createDefaultMagicFormats()
Returns the default format rules. The result is memoized on first use and must be treated as immutabl...
Definition oracleimporter.cpp:757
void setCardLang(const QString &lang)
Definition oracleimporter.cpp:53
OracleImporter(QObject *parent=nullptr)
Definition oracleimporter.cpp:49
QAtomicInt importCancelled
Definition oracleimporter.h:200
QMap< QString, LocalizedCardEntry > splitLocalizedTexts
Definition oracleimporter.h:227
void releaseSetData()
Definition oracleimporter.cpp:856
const QString & getCardLang() const
Definition oracleimporter.h:272
QByteArray rawSetsData
Definition oracleimporter.h:184
bool localizationEnabled
Definition oracleimporter.h:211
const CardNameMap & getCardList() const
Definition oracleimporter.h:305
int startImport()
Definition oracleimporter.cpp:763
int importCardsFromSet(const CardSetPtr &currentSet, const QJsonArray &cardsList)
Definition oracleimporter.cpp:405
CardInfoPtr addCard(QString name, const QString &text, bool isToken, QHash< QString, QString > properties, const QList< CardRelation * > &relatedCards, const PrintingInfo &printingInfo)
Definition oracleimporter.cpp:208
QList< SetToDownload > allSets
Definition oracleimporter.h:178
void setProgressReporting(bool enabled)
Controls whether readSetsFromByteArray() instruments the raw scan.
Definition oracleimporter.h:263
const QByteArray & getRawSetsData() const
Definition oracleimporter.h:313
void setIndexChanged(int cardsImported, int setIndex, const QString &setName)
void dataReadProgress(int bytesRead, int totalBytes)
CardNameMap cards
Definition oracleimporter.h:171
bool readSetsFromByteArray(QByteArray data)
Definition oracleimporter.cpp:101
void collectForeignData(const QString &cardKey, const CardSetPtr &currentSet, const QJsonObject &card, bool collectText=true)
Definition oracleimporter.cpp:336
QList< SetToDownload > & getSets()
Definition oracleimporter.h:309
SetNameMap sets
Definition oracleimporter.h:176
void clear()
Definition oracleimporter.cpp:862
void applyLocalizedData()
Definition oracleimporter.cpp:373
QMap< QString, LocalizedCardEntry > localizedEntries
Definition oracleimporter.h:218
bool saveToFile(const QString &fileName, const QString &sourceUrl, const QString &sourceVersion)
Definition oracleimporter.cpp:849
Represents metadata for a specific variation of a card within a set.
Definition printing_info.h:31
Definition mana_curve_category_widget.h:11
Definition remote_connection_controller.h:20
Definition game.h:18
RawJson::SetDataRange rawRange
Definition oracleimporter.h:69
CardSet::Priority getPriority() const
Definition oracleimporter.h:88
const QDate & getReleaseDate() const
Definition oracleimporter.h:84
const QString & getLongName() const
Definition oracleimporter.h:76
bool operator<(const SetToDownload &set) const
Definition oracleimporter.h:109
void setRawRange(const RawJson::SetDataRange &_rawRange)
Definition oracleimporter.h:105
QString shortName
Definition oracleimporter.h:63
const RawJson::SetDataRange & getRawRange() const
Definition oracleimporter.h:92
SetToDownload(QString _shortName, QString _longName, CardSet::Priority _priority, QString _setType=QString(), const QDate &_releaseDate=QDate())
Definition oracleimporter.h:96
QString longName
Definition oracleimporter.h:63
const QString & getShortName() const
Definition oracleimporter.h:72
const QString & getSetType() const
Definition oracleimporter.h:80
QDate releaseDate
Definition oracleimporter.h:64
QString setType
Definition oracleimporter.h:65
CardSet::Priority priority
Definition oracleimporter.h:66
QString text
Definition oracleimporter.h:149
const QString & getLocalizedText() const
The cardLang rules text of this face's foreignData entry, if any.
Definition oracleimporter.h:134
QString localizedText
Definition oracleimporter.h:150
QHash< QString, QString > properties
Definition oracleimporter.h:151
const QString & getName() const
Definition oracleimporter.h:123
const PrintingInfo & getPrintingInfo() const
Definition oracleimporter.h:142
const QString & getText() const
Definition oracleimporter.h:127
SplitCardPart(const QString &_name, const QString &_text, const QHash< QString, QString > &_properties, const PrintingInfo &_printingInfo, const QString &_localizedText=QString())
Definition oracleimporter.cpp:38
PrintingInfo printingInfo
Definition oracleimporter.h:152
QString name
Definition oracleimporter.h:148
const QHash< QString, QString > & getProperties() const
Definition oracleimporter.h:138
const QMap< QString, CardSet::Priority > setTypePriorities
Definition oracleimporter.h:30
const QStringList nonEnglishSets
Definition oracleimporter.h:29
Definition oracleimporter.h:156
QString name
Definition oracleimporter.h:157
QString text
Definition oracleimporter.h:158
CardSet::Priority priority
Definition oracleimporter.h:159
The byte extent of a set's object inside the scanned document, plus the size of its cards array....
Definition raw_json_scanner.h:20