61 lines
2.3 KiB
Python
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 |