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