47 lines
2.0 KiB
Python
47 lines
2.0 KiB
Python
from datetime import datetime, timedelta
|
||
from typing import TYPE_CHECKING
|
||
|
||
from . import db
|
||
if TYPE_CHECKING:
|
||
from .VideoClip import VideoClip
|
||
from .VideoPart import VideoPart
|
||
from .DanmakuClip import DanmakuClip
|
||
|
||
|
||
class Workflow(db.Model):
|
||
video_clips: list["VideoClip"]
|
||
danmaku_clips: list["DanmakuClip"]
|
||
video_parts: list["VideoPart"]
|
||
|
||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||
name = db.Column(db.String(255), nullable=False)
|
||
state = db.Column(db.SmallInteger, nullable=False, default=0)
|
||
"""0未开始,1弹幕处理,2完成,3弹幕压制,4完成,5切割视频,6完成,9全部完成"""
|
||
create_time = db.Column(db.DateTime, nullable=False, default=datetime.now)
|
||
update_time = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)
|
||
automatic = db.Column(db.Boolean, default=False, nullable=False)
|
||
editing = db.Column(db.Boolean, default=True, nullable=False)
|
||
start_after_time = db.Column(db.DateTime, default=None)
|
||
|
||
def calculate_start_time(self):
|
||
if self.editing:
|
||
self.start_after_time = None
|
||
if not self.automatic:
|
||
self.start_after_time = self.start_after_time
|
||
else:
|
||
self.start_after_time = datetime.now() + timedelta(minutes=30)
|
||
|
||
def to_dict(self):
|
||
return {
|
||
"id": self.id,
|
||
"name": self.name,
|
||
"state": self.state,
|
||
"create_time": self.create_time.strftime("%Y/%m/%d %H:%M:%S") if self.create_time else None,
|
||
"update_time": self.update_time.strftime("%Y/%m/%d %H:%M:%S") if self.update_time else None,
|
||
"automatic": self.automatic,
|
||
"editing": self.editing,
|
||
"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],
|
||
"danmaku_clips": [i.to_json() for i in self.danmaku_clips],
|
||
}
|