1
0
Fork 0
mirror of https://github.com/ldericher/fftcgtool synced 2025-01-15 15:02:59 +00:00
fftcgtool/fftcg/carddb.py

80 lines
2.1 KiB
Python
Raw Normal View History

2021-08-17 15:37:28 +00:00
from __future__ import annotations
2021-08-23 11:43:12 +00:00
import bz2
import pickle
2021-08-16 12:45:15 +00:00
2021-08-23 14:55:41 +00:00
from .card import Card
from .cards import Cards
from .code import Code
2021-09-02 01:06:12 +00:00
from .language import API_LANGS
2021-08-23 14:55:41 +00:00
from .utils import CARDDB_FILE_NAME
2021-08-17 15:37:28 +00:00
class CardDB:
__instance: CardDB = None
2021-09-02 01:06:12 +00:00
__cards: dict[Code, Card]
__face_to_url: dict[str, str]
2021-08-16 12:45:15 +00:00
2021-09-01 18:14:56 +00:00
def __new__(cls) -> CardDB:
if CardDB.__instance is None:
CardDB.__instance = object.__new__(cls)
2021-09-02 01:06:12 +00:00
CardDB.__instance.__cards = {}
CardDB.__instance.__face_to_url = {}
2021-08-16 12:45:15 +00:00
2021-08-17 15:37:28 +00:00
return CardDB.__instance
2021-08-16 12:45:15 +00:00
def __contains__(self, item: Code) -> bool:
2021-09-02 01:06:12 +00:00
return item in self.__cards
2021-08-18 14:52:32 +00:00
def __getitem__(self, code: Code) -> Card:
2021-09-02 01:06:12 +00:00
return self.__cards[code]
def __pickle(self):
# pickle db file
with bz2.BZ2File(CARDDB_FILE_NAME, "w") as file:
pickle.dump(self.__cards, file)
pickle.dump(self.__face_to_url, file)
2021-08-17 15:37:28 +00:00
2021-08-23 14:46:53 +00:00
def update(self, cards: Cards):
for card in cards:
2021-09-02 01:06:12 +00:00
self.__cards[card.code] = card
2021-08-23 14:46:53 +00:00
2021-09-02 01:06:12 +00:00
self.__pickle()
2021-08-23 14:46:53 +00:00
2021-09-02 01:11:31 +00:00
def get_face_url(self, face: str) -> str:
if face in self.__face_to_url:
return self.__face_to_url[face]
else:
return face
2021-09-02 01:06:12 +00:00
def upload_prompt(self) -> None:
faces = list(set([
card[lang].face
for card in self.__cards.values()
for lang in API_LANGS
if card[lang].face
]))
faces.sort()
for face in faces:
if face not in self.__face_to_url:
face_url = input(f"Upload '{face}' and paste URL: ")
if face_url:
self.__face_to_url[face] = face_url
self.__pickle()
def __unpickle(self):
2021-08-23 14:46:53 +00:00
# unpickle db file
2021-09-02 01:06:12 +00:00
self.__cards.clear()
self.__face_to_url.clear()
2021-08-16 12:45:15 +00:00
try:
2021-08-23 14:00:17 +00:00
with bz2.BZ2File(CARDDB_FILE_NAME, "r") as file:
2021-09-02 01:06:12 +00:00
self.__cards |= pickle.load(file)
self.__face_to_url |= pickle.load(file)
2021-08-16 12:45:15 +00:00
except FileNotFoundError:
2021-08-23 14:46:53 +00:00
pass
2021-09-02 01:06:12 +00:00
def load(self) -> None:
self.__unpickle()