关联关系修改

This commit is contained in:
Jerry Yan 2022-04-22 16:03:05 +08:00
parent f08edd0af5
commit b80df83069
4 changed files with 26 additions and 19 deletions

View File

@ -2,18 +2,19 @@ import os.path
import threading import threading
from datetime import datetime from datetime import datetime
from glob import glob from glob import glob
from flask import Blueprint, jsonify, request, current_app
from typing import Optional from typing import Optional
from flask import Blueprint, jsonify, request, current_app
from config import BILILIVE_RECORDER_DIRECTORY, VIDEO_TITLE, XIGUALIVE_RECORDER_DIRECTORY from config import BILILIVE_RECORDER_DIRECTORY, VIDEO_TITLE, XIGUALIVE_RECORDER_DIRECTORY
from exception.danmaku import DanmakuException
from model import db from model import db
from model.DanmakuClip import DanmakuClip from model.DanmakuClip import DanmakuClip
from model.VideoClip import VideoClip from model.VideoClip import VideoClip
from model.Workflow import Workflow from model.Workflow import Workflow
from workflow.worker import do_workflow
from workflow.danmaku import get_file_start from workflow.danmaku import get_file_start
from workflow.video import get_video_real_duration from workflow.video import get_video_real_duration
from exception.danmaku import DanmakuException from workflow.worker import do_workflow
blueprint = Blueprint("api_bilirecorder", __name__, url_prefix="/api/bilirecorder") blueprint = Blueprint("api_bilirecorder", __name__, url_prefix="/api/bilirecorder")
@ -25,12 +26,14 @@ def auto_submit_task():
if bili_record_workflow_item is None: if bili_record_workflow_item is None:
return return
if not bili_record_workflow_item.editing: if not bili_record_workflow_item.editing:
if len(bili_record_workflow_item.video_clips) > 0 and len(bili_record_workflow_item.danmaku_clips) > 0: if len(bili_record_workflow_item.video_clips) > 0:
threading.Thread(target=do_workflow, args=( for video_clip in bili_record_workflow_item.video_clips:
bili_record_workflow_item.video_clips[0].full_path, if len(video_clip.danmaku_clips) > 0:
bili_record_workflow_item.danmaku_clips[0].full_path, threading.Thread(target=do_workflow, args=(
*[clip.full_path for clip in bili_record_workflow_item.danmaku_clips[1:]] video_clip.full_path,
)).start() video_clip.danmaku_clips[0].full_path,
*[clip.full_path for clip in video_clip.danmaku_clips[1:]]
)).start()
clear_item() clear_item()
@ -98,9 +101,9 @@ def collect_danmaku_files(workflow: Optional[Workflow]):
danmaku.file = relpath danmaku.file = relpath
danmaku.base_path = BILILIVE_RECORDER_DIRECTORY danmaku.base_path = BILILIVE_RECORDER_DIRECTORY
danmaku.offset = 0 danmaku.offset = 0
danmaku.workflow = workflow danmaku.video_clip = clip
db.session.add(danmaku) db.session.add(danmaku)
workflow.danmaku_clips.append(danmaku) clip.danmaku_clips.append(danmaku)
if start_time_ts is None: if start_time_ts is None:
if clip.duration is None or clip.duration == 0: if clip.duration is None or clip.duration == 0:
clip.duration = get_video_real_duration(clip.full_path) clip.duration = get_video_real_duration(clip.full_path)
@ -123,9 +126,9 @@ def collect_danmaku_files(workflow: Optional[Workflow]):
danmaku.file = relpath danmaku.file = relpath
danmaku.base_path = XIGUALIVE_RECORDER_DIRECTORY danmaku.base_path = XIGUALIVE_RECORDER_DIRECTORY
danmaku.offset = bias danmaku.offset = bias
danmaku.workflow = workflow danmaku.video_clip = clip
db.session.add(danmaku) db.session.add(danmaku)
workflow.danmaku_clips.append(danmaku) clip.danmaku_clips.append(danmaku)
commit_item() commit_item()

View File

@ -2,8 +2,9 @@ import os
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from . import db from . import db
if TYPE_CHECKING: if TYPE_CHECKING:
from .Workflow import Workflow from .VideoClip import VideoClip
class DanmakuClip(db.Model): class DanmakuClip(db.Model):
@ -11,8 +12,8 @@ class DanmakuClip(db.Model):
base_path = db.Column(db.String(255)) base_path = db.Column(db.String(255))
file = db.Column(db.String(255)) file = db.Column(db.String(255))
offset = db.Column(db.Float, nullable=False, default=0) offset = db.Column(db.Float, nullable=False, default=0)
workflow_id = db.Column(db.Integer, db.ForeignKey('workflow.id')) video_clip_id = db.Column(db.Integer, db.ForeignKey('video_clip.id'))
workflow: "Workflow" = db.relationship("Workflow", uselist=False, backref=db.backref("danmaku_clips")) video_clip: "VideoClip" = db.relationship("VideoClip", uselist=False, backref=db.backref("danmaku_clips"))
@property @property
def full_path(self): def full_path(self):

View File

@ -2,11 +2,15 @@ import os.path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from . import db from . import db
if TYPE_CHECKING: if TYPE_CHECKING:
from .Workflow import Workflow from .Workflow import Workflow
from .DanmakuClip import DanmakuClip
class VideoClip(db.Model): class VideoClip(db.Model):
danmaku_clips: list["DanmakuClip"]
id = db.Column(db.Integer, primary_key=True, autoincrement=True) id = db.Column(db.Integer, primary_key=True, autoincrement=True)
base_path = db.Column(db.String(255)) base_path = db.Column(db.String(255))
file = db.Column(db.String(255)) file = db.Column(db.String(255))
@ -30,4 +34,5 @@ class VideoClip(db.Model):
"duration": self.duration, "duration": self.duration,
"offset": self.offset, "offset": self.offset,
"workflow_id": self.workflow_id, "workflow_id": self.workflow_id,
"danmaku_clips": [i.to_json() for i in self.danmaku_clips],
} }

View File

@ -2,15 +2,14 @@ from datetime import datetime, timedelta
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from . import db from . import db
if TYPE_CHECKING: if TYPE_CHECKING:
from .VideoClip import VideoClip from .VideoClip import VideoClip
from .VideoPart import VideoPart from .VideoPart import VideoPart
from .DanmakuClip import DanmakuClip
class Workflow(db.Model): class Workflow(db.Model):
video_clips: list["VideoClip"] video_clips: list["VideoClip"]
danmaku_clips: list["DanmakuClip"]
video_parts: list["VideoPart"] video_parts: list["VideoPart"]
id = db.Column(db.Integer, primary_key=True, autoincrement=True) id = db.Column(db.Integer, primary_key=True, autoincrement=True)
@ -42,5 +41,4 @@ class Workflow(db.Model):
"editing": self.editing, "editing": self.editing,
"start_after_time": self.start_after_time.strftime("%Y/%m/%d %H:%M:%S") if self.start_after_time else None, "start_after_time": self.start_after_time.strftime("%Y/%m/%d %H:%M:%S") if self.start_after_time else None,
"video_clips": [i.to_json() for i in self.video_clips], "video_clips": [i.to_json() for i in self.video_clips],
"danmaku_clips": [i.to_json() for i in self.danmaku_clips],
} }