extends Node var _caching = preload("res://caching.gd") var _decklist func _init() -> void: _decklist = Dictionary() func _write_to_decks(_decks: Array) -> void: if FileAccess.file_exists("user://decks.json"): DirAccess.remove_absolute("user://decks.json") var file = FileAccess.open("user://decks.json", FileAccess.WRITE) file.store_line(JSON.stringify(_decks)) file.close() func load_decks() -> Array: if !FileAccess.file_exists("user://decks.json"): return [] var file = FileAccess.open("user://decks.json", FileAccess.READ) var file_text = file.get_as_text() file.close() return JSON.parse_string(file_text) func _convert_mtgo_to_cache_lookup(decklist: String) -> Dictionary: var _cards = {} var lines = decklist.split("\n") for line in lines: var words = line.split(" ", false, 1) if words.size() != 2: continue _cards[words[1]] = words[0] return _cards func _do_free(cache) -> void: if !cache.has_emitted_all(): return cache.queue_free() func add_new_deck(cards: String, name: String, about = "") -> void: var _queries = _convert_mtgo_to_cache_lookup(cards) _do_decklist_cache(_queries) var _decks = load_decks() _decks.push_back({"name": name, "about": about, "decklist": _queries}) _write_to_decks(_decks) func _do_decklist_cache(_queries: Dictionary) -> void: var cache = _caching.new() add_child(cache) cache.setup() for query in _queries: var entry = cache.get_card_data_from_name(query) if entry.size() == 0: push_error("Failed to find card: " + query) continue _decklist[entry["id"]] = _queries[query] cache.fetch_done.connect(_do_free.bind(cache)) func _show_decklist() -> void: for card in _decklist: print(card + " : " + _decklist[card])