You've already forked my-video-workflow
初次提交
This commit is contained in:
20
model/DanmakuClip.py
Normal file
20
model/DanmakuClip.py
Normal file
@ -0,0 +1,20 @@
|
||||
from . import db
|
||||
|
||||
|
||||
class DanmakuClip(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
base_path = db.Column(db.String(255))
|
||||
file = db.Column(db.String(255))
|
||||
subtitle_file = db.Column(db.String(255))
|
||||
offset = db.Column(db.Float, nullable=False, default=0)
|
||||
workflow_id = db.Column(db.Integer, db.ForeignKey('workflow.id'))
|
||||
workflow = db.relationship("Workflow", backref=db.backref("danmaku_clips", lazy="dynamic"))
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"base_path": self.base_path,
|
||||
"file": self.file,
|
||||
"subtitle_file": self.subtitle_file,
|
||||
"offset": self.offset,
|
||||
}
|
25
model/Posting.py
Normal file
25
model/Posting.py
Normal file
@ -0,0 +1,25 @@
|
||||
from datetime import datetime
|
||||
|
||||
from model import db
|
||||
|
||||
|
||||
class Posting(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
bvid = db.Column(db.String(255))
|
||||
name = db.Column(db.String(255))
|
||||
description = db.Column(db.Text)
|
||||
state = db.Column(db.SmallInteger, nullable=False, default=0)
|
||||
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)
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"bvid": self.bvid,
|
||||
"name": self.name,
|
||||
"description": self.description,
|
||||
"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,
|
||||
"video_parts": [i.to_json() for i in self.video_parts.all()]
|
||||
}
|
29
model/VideoClip.py
Normal file
29
model/VideoClip.py
Normal file
@ -0,0 +1,29 @@
|
||||
import os.path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import db
|
||||
if TYPE_CHECKING:
|
||||
from .Workflow import Workflow
|
||||
|
||||
|
||||
class VideoClip(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
base_path = db.Column(db.String(255))
|
||||
file = db.Column(db.String(255))
|
||||
duration = 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'))
|
||||
workflow: "Workflow" = db.relationship("Workflow", uselist=False, backref=db.backref("video_clips"))
|
||||
|
||||
@property
|
||||
def full_path(self):
|
||||
return os.path.abspath(os.path.join(self.base_path, self.file))
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"base_path": self.base_path,
|
||||
"file": self.file,
|
||||
"duration": self.duration,
|
||||
"offset": self.offset,
|
||||
}
|
29
model/VideoPart.py
Normal file
29
model/VideoPart.py
Normal file
@ -0,0 +1,29 @@
|
||||
from datetime import datetime
|
||||
|
||||
from . import db
|
||||
|
||||
|
||||
class VideoPart(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
base_path = db.Column(db.String(255), nullable=False)
|
||||
file = db.Column(db.String(255), nullable=False)
|
||||
remote_id = db.Column(db.String(255))
|
||||
name = db.Column(db.String(255))
|
||||
state = db.Column(db.SmallInteger, nullable=False, default=0)
|
||||
|
||||
workflow_id = db.Column(db.Integer, db.ForeignKey('workflow.id'))
|
||||
workflow = db.relationship("Workflow", uselist=False, backref=db.backref("video_parts", lazy="dynamic"))
|
||||
|
||||
posting_id = db.Column(db.Integer, db.ForeignKey('posting.id'))
|
||||
posting = db.relationship("Posting", backref=db.backref("video_parts", lazy="dynamic"), lazy=False)
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"base_path": self.base_path,
|
||||
"file": self.file,
|
||||
"duration": self.duration,
|
||||
"remote_id": self.remote_id,
|
||||
"name": self.name,
|
||||
"state": self.state,
|
||||
}
|
46
model/Workflow.py
Normal file
46
model/Workflow.py
Normal file
@ -0,0 +1,46 @@
|
||||
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],
|
||||
}
|
3
model/__init__.py
Normal file
3
model/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
|
||||
db = SQLAlchemy()
|
Reference in New Issue
Block a user