mirror of
https://github.com/ihmily/StreamCap.git
synced 2026-05-09 23:17:53 +08:00
* refactor: restructure app directory for better organization * update: add missing changes to __init__.py
170 lines
6.7 KiB
Python
170 lines
6.7 KiB
Python
import json
|
|
import os
|
|
import shutil
|
|
from typing import Any
|
|
|
|
import aiofiles
|
|
|
|
from ...utils.logger import logger
|
|
|
|
|
|
class ConfigManager:
|
|
def __init__(self, run_path):
|
|
self.config_path = os.path.join(run_path, "config")
|
|
self.language_config_path = os.path.join(self.config_path, "language.json")
|
|
self.default_config_path = os.path.join(self.config_path, "default_settings.json")
|
|
self.user_config_path = os.path.join(self.config_path, "user_settings.json")
|
|
self.cookies_config_path = os.path.join(self.config_path, "cookies.json")
|
|
self.about_config_path = os.path.join(self.config_path, "version.json")
|
|
self.recordings_config_path = os.path.join(self.config_path, "recordings.json")
|
|
self.accounts_config_path = os.path.join(self.config_path, "accounts.json")
|
|
self.web_auth_config_path = os.path.join(self.config_path, "web_auth.json")
|
|
|
|
os.makedirs(os.path.dirname(self.default_config_path), exist_ok=True)
|
|
self.init()
|
|
|
|
def init(self):
|
|
self.init_default_config()
|
|
self.init_user_config()
|
|
self.init_cookies_config()
|
|
self.init_accounts_config()
|
|
self.init_recordings_config()
|
|
self.init_web_auth_config()
|
|
|
|
@staticmethod
|
|
def _init_config(config_path, default_config=None):
|
|
"""Initialize a configuration file with default values if it does not exist."""
|
|
if not os.path.exists(config_path):
|
|
if default_config is None:
|
|
default_config = {}
|
|
try:
|
|
with open(config_path, "w", encoding="utf-8") as file:
|
|
json.dump(default_config, file, ensure_ascii=False, indent=4)
|
|
logger.info(f"Initialized configuration file: {config_path}")
|
|
except Exception as e:
|
|
logger.error(f"Failed to initialize configuration file {config_path}: {e}")
|
|
|
|
def init_default_config(self):
|
|
default_config = {}
|
|
self._init_config(self.default_config_path, default_config)
|
|
|
|
def init_user_config(self):
|
|
if os.path.exists(self.user_config_path) and self.load_user_config():
|
|
return
|
|
shutil.copy(self.default_config_path, self.user_config_path)
|
|
|
|
def init_cookies_config(self):
|
|
cookies_config = {}
|
|
self._init_config(self.cookies_config_path, cookies_config)
|
|
|
|
def init_accounts_config(self):
|
|
cookies_config = {}
|
|
self._init_config(self.accounts_config_path, cookies_config)
|
|
|
|
def init_recordings_config(self):
|
|
cookies_config = {}
|
|
self._init_config(self.recordings_config_path, cookies_config)
|
|
|
|
def init_web_auth_config(self):
|
|
cookies_config = {}
|
|
self._init_config(self.web_auth_config_path, cookies_config)
|
|
|
|
@staticmethod
|
|
def _load_config(config_path, error_message):
|
|
"""Load configuration from a JSON file."""
|
|
try:
|
|
with open(config_path, encoding="utf-8") as file:
|
|
return json.load(file)
|
|
except json.JSONDecodeError:
|
|
logger.error(f"Invalid JSON format in file: {config_path}")
|
|
return {}
|
|
except FileNotFoundError:
|
|
logger.error(f"Configuration file not found: {config_path}")
|
|
return {}
|
|
except Exception as e:
|
|
logger.error(f"{error_message}: {e}")
|
|
return {}
|
|
|
|
def load_default_config(self):
|
|
return self._load_config(self.default_config_path, "An error occurred while loading default config")
|
|
|
|
def load_user_config(self):
|
|
return self._load_config(self.user_config_path, "An error occurred while loading user config")
|
|
|
|
def load_recordings_config(self):
|
|
return self._load_config(self.recordings_config_path, "An error occurred while loading recordings config")
|
|
|
|
def load_accounts_config(self):
|
|
return self._load_config(self.accounts_config_path, "An error occurred while loading accounts config")
|
|
|
|
def load_cookies_config(self):
|
|
return self._load_config(self.cookies_config_path, "An error occurred while loading cookies config")
|
|
|
|
def load_about_config(self):
|
|
return self._load_config(self.about_config_path, "An error occurred while loading about config")
|
|
|
|
def load_language_config(self):
|
|
return self._load_config(self.language_config_path, "An error occurred while loading language config")
|
|
|
|
def load_i18n_config(self, path):
|
|
"""Load i18n configuration from a JSON file."""
|
|
return self._load_config(path, "An error occurred while loading i18n config")
|
|
|
|
def load_web_auth_config(self):
|
|
return self._load_config(self.web_auth_config_path, "An error occurred while loading web auth config")
|
|
|
|
@staticmethod
|
|
async def _save_config(config_path, config, success_message, error_message):
|
|
"""Save configuration to a JSON file."""
|
|
try:
|
|
async with aiofiles.open(config_path, "w", encoding="utf-8") as file:
|
|
await file.write(json.dumps(config, ensure_ascii=False, indent=4))
|
|
logger.info(success_message)
|
|
except Exception as e:
|
|
logger.error(f"{error_message}: {e}")
|
|
|
|
async def save_recordings_config(self, config):
|
|
await self._save_config(
|
|
self.recordings_config_path,
|
|
config,
|
|
success_message="Recordings configuration saved.",
|
|
error_message="An error occurred while saving recordings config",
|
|
)
|
|
|
|
async def save_accounts_config(self, config):
|
|
await self._save_config(
|
|
self.accounts_config_path,
|
|
config,
|
|
success_message="Accounts configuration saved.",
|
|
error_message="An error occurred while saving accounts config",
|
|
)
|
|
|
|
async def save_web_auth_config(self, config):
|
|
await self._save_config(
|
|
self.web_auth_config_path,
|
|
config,
|
|
success_message="Web auth configuration saved.",
|
|
error_message="An error occurred while saving web auth config",
|
|
)
|
|
|
|
async def save_user_config(self, config):
|
|
await self._save_config(
|
|
self.user_config_path,
|
|
config,
|
|
success_message="User configuration saved.",
|
|
error_message="An error occurred while saving user config",
|
|
)
|
|
|
|
async def save_cookies_config(self, config):
|
|
await self._save_config(
|
|
self.cookies_config_path,
|
|
config,
|
|
success_message="Cookies configuration saved.",
|
|
error_message="An error occurred while saving cookies config",
|
|
)
|
|
|
|
def get_config_value(self, key: str, default: Any = None):
|
|
user_config = self.load_user_config()
|
|
default_config = self.load_default_config()
|
|
return user_config.get(key, default_config.get(key, default))
|