Cockatrice 2026-01-14-Development-2.11.0-beta.46
A cross-platform virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
interface_json_deck_parser.h
Go to the documentation of this file.
1
6
7#ifndef INTERFACE_JSON_DECK_PARSER_H
8#define INTERFACE_JSON_DECK_PARSER_H
9
12
13#include <QJsonArray>
14#include <QJsonObject>
15
17{
18public:
19 virtual ~IJsonDeckParser() = default;
20
21 virtual DeckList parse(const QJsonObject &obj) = 0;
22};
23
25{
26public:
27 DeckList parse(const QJsonObject &obj) override
28 {
29 DeckList deckList;
30
31 QString deckName = obj.value("name").toString();
32 QString deckDescription = obj.value("description").toString();
33
34 deckList.setName(deckName);
35 deckList.setComments(deckDescription);
36
37 QString outputText;
38 QTextStream outStream(&outputText);
39
40 for (auto entry : obj.value("cards").toArray()) {
41 auto quantity = entry.toObject().value("quantity").toInt();
42
43 auto card = entry.toObject().value("card").toObject();
44 auto oracleCard = card.value("oracleCard").toObject();
45 QString cardName = oracleCard.value("name").toString();
46 QString setName = card.value("edition").toObject().value("editioncode").toString().toUpper();
47 QString collectorNumber = card.value("collectorNumber").toString();
48
49 outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
50 }
51
52 deckList.loadFromStream_Plain(outStream, false);
54
55 return deckList;
56 }
57};
58
60{
61public:
62 DeckList parse(const QJsonObject &obj) override
63 {
64 DeckList deckList;
65
66 QString deckName = obj.value("name").toString();
67 QString deckDescription = obj.value("description").toString();
68
69 deckList.setName(deckName);
70 deckList.setComments(deckDescription);
71
72 QString outputText;
73 QTextStream outStream(&outputText);
74
75 for (auto entry : obj.value("mainboard").toObject()) {
76 auto quantity = entry.toObject().value("quantity").toInt();
77
78 auto card = entry.toObject().value("card").toObject();
79 QString cardName = card.value("name").toString();
80 QString setName = card.value("set").toString().toUpper();
81 QString collectorNumber = card.value("cn").toString();
82
83 outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
84 }
85
86 outStream << '\n';
87
88 for (auto entry : obj.value("sideboard").toObject()) {
89 auto quantity = entry.toObject().value("quantity").toInt();
90
91 auto card = entry.toObject().value("card").toObject();
92 QString cardName = card.value("name").toString();
93 QString setName = card.value("set").toString().toUpper();
94 QString collectorNumber = card.value("cn").toString();
95
96 outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
97 }
98
99 deckList.loadFromStream_Plain(outStream, false);
101
102 QJsonObject commandersObj = obj.value("commanders").toObject();
103 if (!commandersObj.isEmpty()) {
104 for (auto it = commandersObj.begin(); it != commandersObj.end(); ++it) {
105 QJsonObject cardData = it.value().toObject().value("card").toObject();
106 QString commanderName = cardData.value("name").toString();
107 QString setName = cardData.value("set").toString().toUpper();
108 QString collectorNumber = cardData.value("cn").toString();
109 QString providerId = cardData.value("scryfall_id").toString();
110
111 deckList.setBannerCard({commanderName, providerId});
112 deckList.addCard(commanderName, DECK_ZONE_MAIN, -1, setName, collectorNumber, providerId);
113 }
114 }
115
116 return deckList;
117 }
118};
119
120#endif // INTERFACE_JSON_DECK_PARSER_H
Definition interface_json_deck_parser.h:25
DeckList parse(const QJsonObject &obj) override
Definition interface_json_deck_parser.h:27
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:63
void setBannerCard(const CardRef &_bannerCard={})
Definition deck_list.h:114
void forEachCard(const std::function< void(InnerDecklistNode *, DecklistCardNode *)> &func) const
Apply a function to every card in the deck tree.
Definition deck_list.cpp:525
bool loadFromStream_Plain(QTextStream &stream, bool preserveMetadata)
Definition deck_list.cpp:204
void setComments(const QString &_comments=QString())
Definition deck_list.h:98
DecklistCardNode * addCard(const QString &cardName, const QString &zoneName, int position=-1, const QString &cardSetName=QString(), const QString &cardSetCollectorNumber=QString(), const QString &cardProviderId=QString(), const bool formatLegal=true)
Definition deck_list.cpp:484
void setName(const QString &_name=QString())
Definition deck_list.h:94
Definition interface_json_deck_parser.h:17
virtual ~IJsonDeckParser()=default
virtual DeckList parse(const QJsonObject &obj)=0
Definition interface_json_deck_parser.h:60
DeckList parse(const QJsonObject &obj) override
Definition interface_json_deck_parser.h:62
TODO: Document this.
#define DECK_ZONE_MAIN
Constant for the "main" deck zone name.
Definition inner_deck_list_node.h:22
Sets the providerId of the card based on its set name and collector number.
Definition card_node_function.h:33