Cockatrice 2025-11-30-Development-2.11.0-beta.38
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
10
11#include <QJsonArray>
12#include <QJsonObject>
13
15{
16public:
17 virtual ~IJsonDeckParser() = default;
18
19 virtual DeckLoader *parse(const QJsonObject &obj) = 0;
20};
21
23{
24public:
25 DeckLoader *parse(const QJsonObject &obj) override
26 {
27 DeckLoader *loader = new DeckLoader(nullptr);
28
29 QString deckName = obj.value("name").toString();
30 QString deckDescription = obj.value("description").toString();
31
32 loader->getDeckList()->setName(deckName);
33 loader->getDeckList()->setComments(deckDescription);
34
35 QString outputText;
36 QTextStream outStream(&outputText);
37
38 for (auto entry : obj.value("cards").toArray()) {
39 auto quantity = entry.toObject().value("quantity").toInt();
40
41 auto card = entry.toObject().value("card").toObject();
42 auto oracleCard = card.value("oracleCard").toObject();
43 QString cardName = oracleCard.value("name").toString();
44 QString setName = card.value("edition").toObject().value("editioncode").toString().toUpper();
45 QString collectorNumber = card.value("collectorNumber").toString();
46
47 outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
48 }
49
50 loader->getDeckList()->loadFromStream_Plain(outStream, false);
51 DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
52
53 return loader;
54 }
55};
56
58{
59public:
60 DeckLoader *parse(const QJsonObject &obj) override
61 {
62 DeckLoader *loader = new DeckLoader(nullptr);
63
64 QString deckName = obj.value("name").toString();
65 QString deckDescription = obj.value("description").toString();
66
67 loader->getDeckList()->setName(deckName);
68 loader->getDeckList()->setComments(deckDescription);
69
70 QString outputText;
71 QTextStream outStream(&outputText);
72
73 for (auto entry : obj.value("mainboard").toObject()) {
74 auto quantity = entry.toObject().value("quantity").toInt();
75
76 auto card = entry.toObject().value("card").toObject();
77 QString cardName = card.value("name").toString();
78 QString setName = card.value("set").toString().toUpper();
79 QString collectorNumber = card.value("cn").toString();
80
81 outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
82 }
83
84 outStream << '\n';
85
86 for (auto entry : obj.value("sideboard").toObject()) {
87 auto quantity = entry.toObject().value("quantity").toInt();
88
89 auto card = entry.toObject().value("card").toObject();
90 QString cardName = card.value("name").toString();
91 QString setName = card.value("set").toString().toUpper();
92 QString collectorNumber = card.value("cn").toString();
93
94 outStream << quantity << ' ' << cardName << " (" << setName << ") " << collectorNumber << '\n';
95 }
96
97 loader->getDeckList()->loadFromStream_Plain(outStream, false);
98 DeckLoader::resolveSetNameAndNumberToProviderID(loader->getDeckList());
99
100 QJsonObject commandersObj = obj.value("commanders").toObject();
101 if (!commandersObj.isEmpty()) {
102 for (auto it = commandersObj.begin(); it != commandersObj.end(); ++it) {
103 QJsonObject cardData = it.value().toObject().value("card").toObject();
104 QString commanderName = cardData.value("name").toString();
105 QString setName = cardData.value("set").toString().toUpper();
106 QString collectorNumber = cardData.value("cn").toString();
107 QString providerId = cardData.value("scryfall_id").toString();
108
109 loader->getDeckList()->setBannerCard({commanderName, providerId});
110 loader->getDeckList()->addCard(commanderName, DECK_ZONE_MAIN, -1, setName, collectorNumber, providerId);
111 }
112 }
113
114 return loader;
115 }
116};
117
118#endif // INTERFACE_JSON_DECK_PARSER_H
Definition interface_json_deck_parser.h:23
DeckLoader * parse(const QJsonObject &obj) override
Definition interface_json_deck_parser.h:25
Definition interface_json_deck_parser.h:15
virtual DeckLoader * parse(const QJsonObject &obj)=0
virtual ~IJsonDeckParser()=default
Definition interface_json_deck_parser.h:58
DeckLoader * parse(const QJsonObject &obj) override
Definition interface_json_deck_parser.h:60
TODO: Document this.
#define DECK_ZONE_MAIN
Constant for the "main" deck zone name.
Definition inner_deck_list_node.h:22