81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
import threading
|
|
|
|
from flask import Blueprint, jsonify
|
|
|
|
from model import db
|
|
from model.Workflow import Workflow
|
|
from util.flask import not_found_json_response
|
|
from workflow.worker import do_workflow
|
|
|
|
blueprint = Blueprint("api_workflow", __name__, url_prefix="/api/workflow")
|
|
|
|
|
|
@blueprint.get("/")
|
|
def get_workflow_list():
|
|
workflows = Workflow.query.all()
|
|
return jsonify([d.to_dict() for d in workflows])
|
|
|
|
|
|
@blueprint.get("/<int:workflow_id>")
|
|
def get_workflow_info(workflow_id):
|
|
workflow = Workflow.query.get(workflow_id)
|
|
if workflow is None:
|
|
return not_found_json_response(id=workflow_id)
|
|
return jsonify(workflow.to_dict())
|
|
|
|
|
|
@blueprint.put("/<int:workflow_id>")
|
|
def modify_workflow_info(workflow_id):
|
|
workflow = Workflow.query.get(workflow_id)
|
|
if workflow is None:
|
|
return not_found_json_response(id=workflow_id)
|
|
return jsonify(workflow)
|
|
|
|
|
|
@blueprint.delete("/<int:workflow_id>")
|
|
def delete_workflow(workflow_id):
|
|
workflow = Workflow.query.get(workflow_id)
|
|
if workflow is not None:
|
|
db.session.delete(workflow)
|
|
db.session.commit()
|
|
return jsonify({
|
|
"id": workflow_id,
|
|
"old_data": workflow.to_json() if workflow is not None else {}
|
|
})
|
|
|
|
|
|
@blueprint.post("/<int:workflow_id>/edit")
|
|
def start_editing(workflow_id):
|
|
workflow = Workflow.query.get(workflow_id)
|
|
if workflow is None:
|
|
return not_found_json_response(id=workflow_id)
|
|
workflow.editing = True
|
|
db.session.commit()
|
|
return jsonify(workflow.to_dict())
|
|
|
|
|
|
@blueprint.delete("/<int:workflow_id>/edit")
|
|
def done_editing(workflow_id):
|
|
workflow = Workflow.query.get(workflow_id)
|
|
if workflow is None:
|
|
return not_found_json_response(id=workflow_id)
|
|
workflow.editing = False
|
|
db.session.commit()
|
|
return jsonify(workflow.to_dict())
|
|
|
|
|
|
@blueprint.post("/<int:workflow_id>/do")
|
|
def start_workflow(workflow_id):
|
|
workflow = Workflow.query.get(workflow_id)
|
|
if workflow is None:
|
|
return not_found_json_response(id=workflow_id)
|
|
if len(workflow.video_clips) > 0:
|
|
for video_clip in workflow.video_clips:
|
|
if len(video_clip.danmaku_clips) > 0:
|
|
threading.Thread(target=do_workflow, args=(
|
|
video_clip.full_path,
|
|
video_clip.danmaku_clips[0].full_path,
|
|
*[clip.full_path for clip in video_clip.danmaku_clips[1:]]
|
|
)).start()
|
|
return jsonify(workflow.to_dict())
|