diff --git a/src/character_select.py b/src/character_select.py index c5525c9..a4a7166 100644 --- a/src/character_select.py +++ b/src/character_select.py @@ -9,6 +9,10 @@ from ..sn0w import ConfigReader, Logger, Utility, MessageHolder routes = MessageHolder.routes API_PREFIX = MessageHolder.API_PREFIX +# File paths +CHARACTER_FILE_PATH = "web/settings/characters.json" +CUSTOM_CHARACTER_FILE_PATH = "web/settings/custom_characters.json" + @routes.post(f"{API_PREFIX}/update_characters") async def handle_update_characters(request): @@ -38,15 +42,32 @@ class CharacterSelectNode: cls.load_characters(dir_path) + @classmethod + def get_base_dir(cls): + dir_path = os.path.dirname(os.path.realpath(__file__)) + if os.path.basename(dir_path) == "src": + dir_path = os.path.dirname(dir_path) + return dir_path + + @classmethod + def check_initialize(cls): + if not cls.final_characters or cls.cached_default_character_setting != ConfigReader.get_setting( + "sn0w.DisableDefaultCharacters", False + ): + cls.cached_default_character_setting = ConfigReader.get_setting("sn0w.DisableDefaultCharacters", False) + cls.initialize() + elif cls.cached_sorting_setting != ConfigReader.get_setting("sn0w.SortBySeries", False): + cls.sort_characters() + @classmethod def load_characters(cls, dir_path): character_data = [] if not cls.cached_default_character_setting: - json_path = os.path.join(dir_path, "web/settings/characters.json") + json_path = os.path.join(dir_path, CHARACTER_FILE_PATH) with open(json_path, "r", encoding="utf-8") as file: character_data = json.load(file) - custom_json_path = os.path.join(dir_path, "web/settings/custom_characters.json") + custom_json_path = os.path.join(dir_path, CUSTOM_CHARACTER_FILE_PATH) if os.path.exists(custom_json_path): with open(custom_json_path, "r", encoding="utf-8") as file: custom_character_data = json.load(file) @@ -64,7 +85,10 @@ class CharacterSelectNode: @staticmethod def extract_series_name(character_name): - return character_name.split("(")[-1].split(")")[0].strip() + series = character_name.split("(")[-1].split(")")[0].strip() + if character_name == series: + Logger().log(f"{character_name} has no series name.", "WARNING") + return series @classmethod def sort_characters(cls, force_sort=False): @@ -84,13 +108,7 @@ class CharacterSelectNode: @classmethod def INPUT_TYPES(cls): - if not cls.final_characters: # Check if initialization is needed - cls.initialize() - elif cls.cached_default_character_setting != ConfigReader.get_setting("sn0w.DisableDefaultCharacters", False): - cls.cached_default_character_setting = not cls.cached_default_character_setting - cls.initialize() - else: - cls.sort_characters() + cls.check_initialize() character_names = ["None"] + list(cls.final_characters) return { "required": {