diff --git a/controller/api/bilirecorder_blueprint.py b/controller/api/bilirecorder_blueprint.py index 8354a2b..0c01482 100644 --- a/controller/api/bilirecorder_blueprint.py +++ b/controller/api/bilirecorder_blueprint.py @@ -5,7 +5,7 @@ from glob import glob from flask import Blueprint, jsonify, request, current_app from typing import Optional -from config import BILILIVE_RECORDER_DIRECTORY, VIDEO_TITLE +from config import BILILIVE_RECORDER_DIRECTORY, VIDEO_TITLE, XIGUALIVE_RECORDER_DIRECTORY from model import db from model.DanmakuClip import DanmakuClip from model.VideoClip import VideoClip @@ -81,22 +81,33 @@ def collect_danmaku_files(workflow: Optional[Workflow]): pre_file_name = os.path.splitext(full_path)[0] # 理论上也只有一个结果 for danmaku_file in glob("{}*xml".format(pre_file_name)): - if os.path.exists(danmaku_file): - relpath = os.path.relpath(danmaku_file, BILILIVE_RECORDER_DIRECTORY) - # 确认是否已经添加 - already_add = False - for danmaku_clip in workflow.danmaku_clips: - if danmaku_clip.file == relpath and danmaku_clip.base_path == BILILIVE_RECORDER_DIRECTORY: - already_add = True - break - if not already_add: - danmaku = DanmakuClip() - danmaku.file = relpath - danmaku.base_path = BILILIVE_RECORDER_DIRECTORY - danmaku.offset = 0 - danmaku.workflow = workflow - db.session.add(danmaku) - workflow.danmaku_clips.append(danmaku) + relpath = os.path.relpath(danmaku_file, BILILIVE_RECORDER_DIRECTORY) + danmaku = DanmakuClip.query.filter( + DanmakuClip.file == relpath, + DanmakuClip.base_path == BILILIVE_RECORDER_DIRECTORY + ).first() + if danmaku is None: + danmaku = DanmakuClip() + danmaku.file = relpath + danmaku.base_path = BILILIVE_RECORDER_DIRECTORY + danmaku.offset = 0 + danmaku.workflow = workflow + db.session.add(danmaku) + workflow.danmaku_clips.append(danmaku) + for danmaku_file in glob(os.path.join(XIGUALIVE_RECORDER_DIRECTORY, "*.xml")): + relpath = os.path.relpath(danmaku_file, XIGUALIVE_RECORDER_DIRECTORY) + danmaku = DanmakuClip.query.filter( + DanmakuClip.file == relpath, + DanmakuClip.base_path == XIGUALIVE_RECORDER_DIRECTORY + ).first() + if danmaku is None: + danmaku = DanmakuClip() + danmaku.file = relpath + danmaku.base_path = XIGUALIVE_RECORDER_DIRECTORY + danmaku.offset = 0 + danmaku.workflow = workflow + db.session.add(danmaku) + workflow.danmaku_clips.append(danmaku) commit_item()