42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
from flask import Blueprint, jsonify, request
|
|
from config import config_manager
|
|
from utils.placeholders import ServicePlaceholder, long_running_task
|
|
|
|
actions_bp = Blueprint('actions', __name__, url_prefix='/api')
|
|
|
|
@actions_bp.route('/downloader/add', methods=['POST'])
|
|
def add_download_task():
|
|
# 逻辑: 根据配置,将下载链接添加到 qBittorrent 或 Transmission
|
|
# 返回格式: {"message": "任务添加成功"}
|
|
data = request.get_json()
|
|
if not data or 'download_url' not in data:
|
|
return jsonify({"error": "缺少 download_url"}), 400
|
|
|
|
downloader_type = config_manager.get('downloader')
|
|
config = config_manager.get(downloader_type)
|
|
manager = ServicePlaceholder(config)
|
|
|
|
success, message = manager.add_task(data['download_url'])
|
|
if success:
|
|
return jsonify({"message": f"任务已成功添加至 {downloader_type}"})
|
|
else:
|
|
return jsonify({"error": message}), 500
|
|
|
|
@actions_bp.route('/scrape', methods=['POST'])
|
|
def scrape_media():
|
|
# 逻辑: 接收媒体路径,在后台线程中启动刮削任务
|
|
# 返回格式 (202 Accepted): {"message": "刮削任务已加入队列..."}
|
|
data = request.get_json()
|
|
media_path = data.get('media_path')
|
|
if not media_path:
|
|
return jsonify({"error": "缺少 media_path"}), 400
|
|
|
|
douban_config = config_manager.get('douban')
|
|
manager = ServicePlaceholder(douban_config)
|
|
|
|
# 在后台线程中执行刮削
|
|
long_running_task(manager.scrape, media_path)
|
|
|
|
# 立即返回 202 Accepted 响应
|
|
return jsonify({"message": "刮削任务已加入队列,请稍后刷新查看结果"}), 202
|