import json import os from app.utils.logger import logger CONFIG_PATH = os.path.abspath( os.path.join(os.path.dirname(__file__), "..", "config.json") ) class ServerConfig: def __init__(self): self.theme = "auto" self.token = "" self.url = "" self.scheme = "https" self.port = "32400" self.load() def load(self) -> None: try: with open(CONFIG_PATH, "r", encoding="utf-8") as f: config = json.load(f) logger.debug(f"Loaded server config: {config}") except FileNotFoundError: # 如果配置文件不存在,使用默认值 self.save() logger.debug("Config file not found, using default values.") return except json.JSONDecodeError: # 如果配置文件格式错误,使用默认值 self.save() logger.debug("Config file is invalid, using default values.") return self.theme = config.get("theme", "auto") self.token = config.get("token", "") self.url = config.get("server_url", "") self.scheme = config.get("server_scheme", "https") self.port = config.get("server_port", "32400") logger.info(f"Server config loaded: {self.__dict__}") def save(self): config = { "theme": self.theme, "token": self.token, "server_url": self.url, "server_scheme": self.scheme, "server_port": self.port, } with open(CONFIG_PATH, "w", encoding="utf-8") as f: json.dump(config, f, indent=4, ensure_ascii=False) logger.info(f"Server config saved: {config}") def set_url(self, url: str) -> None: self.url = url def set_scheme(self, scheme: str) -> None: self.scheme = scheme def set_port(self, port: str) -> None: self.port = port def set_token(self, token: str) -> None: self.token = token def set_theme(self, theme: str) -> None: # check theme is valid if theme not in ["auto", "dark", "light"]: logger.error(f"Invalid theme: {theme}") raise ValueError("Invalid theme. Must be 'auto', 'dark', or 'light'.") self.theme = theme def set_and_save_config( self, theme: str = None, token: str = None, url: str = None, scheme: str = None, port: str = None, ) -> None: if theme is not None: self.set_theme(theme) if token is not None: self.set_token(token) if url is not None: self.set_url(url) if scheme is not None: self.set_scheme(scheme) if port is not None: self.set_port(port) self.save() server_config = ServerConfig()