Files
Skit-Panel/backend/routes/system.py
DengDai 519589f8f5 init
2025-12-08 14:45:14 +08:00

61 lines
2.3 KiB
Python

from flask import Blueprint, jsonify, request
from config import config_manager
from utils.plex_utils import PlexManager
from utils.placeholders import ServicePlaceholder
system_bp = Blueprint('system', __name__, url_prefix='/api/system')
MANAGER_MAP = {
'plex': PlexManager,
# TODO: 当你实现其他 Manager 后,在这里添加它们
# 'qbittorrent': QBManager,
# 'transmission': TransmissionManager,
# 'emby': EmbyManager,
# 'fnos': FnosManager,
}
@system_bp.route('/config', methods=['GET'])
def get_system_config():
"""获取系统配置(屏蔽敏感信息)"""
return jsonify(config_manager.get_config(sensitive=False))
@system_bp.route('/config', methods=['POST'])
def save_system_config():
"""保存系统配置"""
new_config = request.get_json()
if not isinstance(new_config, dict):
return jsonify({"error": "无效的JSON格式"}), 400
success, error = config_manager.save_config(new_config)
if success:
return jsonify({"message": "配置保存成功!"})
else:
return jsonify({"error": f"保存失败: {error}"}), 500
@system_bp.route('/test_connection', methods=['POST'])
def test_connection():
"""动态测试指定服务的连接"""
data = request.get_json()
service_type = data.get('type')
service_config = data.get('config')
if not service_type or not service_config:
return jsonify({"error": "请求参数不完整"}), 400
# 3. 动态选择 Manager
# 从 MANAGER_MAP 中获取对应的类。
# 如果 service_type 不在映射中(例如 'emby' 还没实现),则默认使用 ServicePlaceholder
ManagerClass = MANAGER_MAP.get(service_type, ServicePlaceholder)
# 使用从前端实时传来的配置实例化 Manager
manager_instance = ManagerClass(service_config)
try:
# 调用实例的 test_connection 方法
# 我们新的 Manager 返回 (bool, str),正好符合这里的逻辑
success, message = manager_instance.test_connection()
return jsonify({"success": success, "message": message})
except Exception as e:
# 添加一个通用异常捕获,防止 Manager 内部的意外错误导致服务器崩溃
return jsonify({
"success": False,
"message": f"测试时发生内部错误: {str(e)}"
}), 500