refactor plex_client,config

This commit is contained in:
2025-07-12 19:00:35 +09:00
parent 35bd0c9956
commit 992161f9a9
3 changed files with 211 additions and 104 deletions
+82 -30
View File
@@ -1,36 +1,88 @@
import json
import os
from urllib.parse import urlparse
CONFIG_PATH = os.path.join(os.path.dirname(__file__), "..", "config.json")
def load_config():
if not os.path.exists(CONFIG_PATH):
return {}
with open(CONFIG_PATH, "r", encoding="utf-8") as f:
return json.load(f)
def save_config(new_config):
with open(CONFIG_PATH, "w", encoding="utf-8") as f:
json.dump(new_config, f, indent=4, ensure_ascii=False)
CONFIG_PATH = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "config.json")
)
def get_server_settings(config):
"""Return (scheme, host, port) using defaults when not configured."""
scheme = config.get("server_scheme", "https")
token = config.get("token", "") or ""
host = ""
port = config.get("server_port", "32400") or "32400"
class ServerConfig:
url = config.get("server_url", "")
if url:
parsed = urlparse(url)
if parsed.scheme:
scheme = parsed.scheme
host = parsed.hostname or parsed.netloc
if parsed.port:
port = str(parsed.port)
else:
host = url
print(f"server_scheme: {scheme}, host: {host}, port: {port}")
return token, scheme, host, port
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)
except FileNotFoundError:
# 如果配置文件不存在,使用默认值
self.save()
return
except json.JSONDecodeError:
# 如果配置文件格式错误,使用默认值
self.save()
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")
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)
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"]:
raise ValueError("Invalid theme. Must be 'auto', 'dark', or 'light'.")
self.theme = theme
def set_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()