aboutsummaryrefslogtreecommitdiff
path: root/src/core/card.cc
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-01-15 19:12:12 +0800
committerMistivia <i@mistivia.com>2025-01-15 19:12:46 +0800
commit4da382953c830a61ae24ccbe95c4241db8788269 (patch)
tree31f6d184273274e2660516d1ac1146b5661f20b6 /src/core/card.cc
restore
Diffstat (limited to 'src/core/card.cc')
-rw-r--r--src/core/card.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/core/card.cc b/src/core/card.cc
new file mode 100644
index 0000000..1a4c63d
--- /dev/null
+++ b/src/core/card.cc
@@ -0,0 +1,52 @@
+#include "core/card.h"
+
+#include <sstream>
+#include <fstream>
+
+#include "util/common.h"
+
+static std::map<std::string, Card> card_db;
+
+void init_card_db(){
+ auto fs = std::ifstream{"./resource/mtgzhs"};
+ std::string line;
+ while(std::getline(fs, line, '\n')) {
+ Card card;
+ card.name = line;
+ std::getline(fs, card.zhsname);
+ std::getline(fs, card.zhstext);
+ card_db[card.name] = card;
+ }
+}
+
+Arc<Card> get_card(std::string name) {
+ auto card = make_shared<Card>();
+ card->name = name;
+ card->image_url = "https://api.scryfall.com/cards/named?format=image&version=normal&exact=" + url_encode(name);
+ if (card_db.find(name) != card_db.end()) {
+ card->zhsname = card_db[name].zhsname;
+ card->zhstext = card_db[name].zhstext;
+ card->image_url = "https://api.scryfall.com/cards/named?format=image&version=normal&fuzzy=" + url_encode(card->zhsname);
+ str_replace(card->zhstext, "\001", "\n");
+ }
+ return card;
+}
+
+std::vector<Arc<Card>> parse_cardlist(const std::string &in_str) {
+ std::string str;
+ for (auto c : in_str) {
+ if (c != '\r') {
+ str += c;
+ }
+ }
+
+ auto result = std::vector<Arc<Card>>{};
+ auto ss = std::stringstream{str};
+
+ for (std::string line; std::getline(ss, line, '\n');) {
+ if (!line.empty()) {
+ result.push_back(get_card(line));
+ }
+ }
+ return result;
+} \ No newline at end of file