初次提交

This commit is contained in:
2022-04-15 12:26:43 +08:00
commit 09b2956573
30 changed files with 952 additions and 0 deletions

20
model/DanmakuClip.py Normal file
View 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
View 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
View 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
View 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
View 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
View File

@ -0,0 +1,3 @@
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()