96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
"""
|
|
系统设置服务
|
|
|
|
负责加载、保存和管理全局系统设置。
|
|
"""
|
|
import json
|
|
import logging
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
from core.config import settings
|
|
from models.system_settings import SystemSettings, DEFAULT_SYSTEM_SETTINGS
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SystemSettingsService:
|
|
"""
|
|
系统设置服务
|
|
|
|
提供设置的加载、保存和访问功能
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.settings_file = settings.SYSTEM_SETTINGS_FILE
|
|
self._settings: Optional[SystemSettings] = None
|
|
self._load_settings()
|
|
|
|
def _load_settings(self):
|
|
"""从文件加载系统设置"""
|
|
if self.settings_file.exists():
|
|
try:
|
|
with open(self.settings_file, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
self._settings = SystemSettings(**data)
|
|
logger.info(f"加载系统设置成功")
|
|
except Exception as e:
|
|
logger.error(f"加载系统设置失败: {e}")
|
|
self._settings = DEFAULT_SYSTEM_SETTINGS.copy()
|
|
else:
|
|
logger.info("系统设置文件不存在,使用默认设置")
|
|
self._settings = DEFAULT_SYSTEM_SETTINGS.copy()
|
|
self._save_settings()
|
|
|
|
def _save_settings(self):
|
|
"""保存系统设置到文件"""
|
|
try:
|
|
# 确保父目录存在
|
|
self.settings_file.parent.mkdir(parents=True, exist_ok=True)
|
|
|
|
# 写入文件
|
|
with open(self.settings_file, 'w', encoding='utf-8') as f:
|
|
json.dump(self._settings.dict(), f, ensure_ascii=False, indent=2)
|
|
|
|
logger.info(f"系统设置已保存到 {self.settings_file}")
|
|
except Exception as e:
|
|
logger.error(f"保存系统设置失败: {e}")
|
|
|
|
@property
|
|
def settings(self) -> SystemSettings:
|
|
"""获取当前系统设置"""
|
|
return self._settings
|
|
|
|
def update_thinking_tags(self, prefix: str, suffix: str):
|
|
"""更新思考标签配置"""
|
|
self._settings.thinkingTagPrefix = prefix
|
|
self._settings.thinkingTagSuffix = suffix
|
|
self._settings.updatedAt = int(__import__('time').time())
|
|
self._save_settings()
|
|
logger.info(f"思考标签已更新: {prefix} ... {suffix}")
|
|
|
|
def update_current_preset(self, preset_name: Optional[str]):
|
|
"""更新当前选中的预设名称"""
|
|
self._settings.currentPresetName = preset_name
|
|
self._settings.updatedAt = int(__import__('time').time())
|
|
self._save_settings()
|
|
logger.info(f"当前预设已更新: {preset_name}")
|
|
|
|
def get_thinking_tag_pattern(self) -> str:
|
|
"""获取思考标签的正则表达式模式"""
|
|
prefix = self._settings.thinkingTagPrefix
|
|
suffix = self._settings.thinkingTagSuffix
|
|
|
|
# 转义特殊字符
|
|
import re
|
|
escaped_prefix = re.escape(prefix)
|
|
escaped_suffix = re.escape(suffix)
|
|
|
|
# 返回匹配思考内容的正则模式
|
|
return f"{escaped_prefix}[\\s\\S]*?{escaped_suffix}"
|
|
|
|
|
|
# 全局实例
|
|
system_settings_service = SystemSettingsService()
|