diff options
| author | Mistivia <i@mistivia.com> | 2025-01-15 19:12:12 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-01-15 19:12:46 +0800 |
| commit | 4da382953c830a61ae24ccbe95c4241db8788269 (patch) | |
| tree | 31f6d184273274e2660516d1ac1146b5661f20b6 /src/core/card.cc | |
restore
Diffstat (limited to 'src/core/card.cc')
| -rw-r--r-- | src/core/card.cc | 52 |
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 |
