+import Bluebird from 'bluebird'
import express from 'express'
+import { move } from 'fs-extra'
+import { basename } from 'path'
import { createAnyReqFiles } from '@server/helpers/express-utils'
-import { MIMETYPES } from '@server/initializers/constants'
-import { JobQueue } from '@server/lib/job-queue'
-import { buildTaskFileFieldname, getTaskFile } from '@server/lib/video-studio'
+import { MIMETYPES, VIDEO_FILTERS } from '@server/initializers/constants'
+import { buildTaskFileFieldname, createVideoStudioJob, getStudioTaskFilePath, getTaskFileFromReq } from '@server/lib/video-studio'
import {
HttpStatusCode,
VideoState,
const payload = {
videoUUID: video.uuid,
- tasks: body.tasks.map((t, i) => buildTaskPayload(t, i, files))
+ tasks: await Bluebird.mapSeries(body.tasks, (t, i) => buildTaskPayload(t, i, files))
}
- JobQueue.Instance.createJobAsync({ type: 'video-studio-edition', payload })
+ await createVideoStudioJob({
+ user: res.locals.oauth.token.User,
+ payload,
+ video
+ })
return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
}
const taskPayloadBuilders: {
- [id in VideoStudioTask['name']]: (task: VideoStudioTask, indice?: number, files?: Express.Multer.File[]) => VideoStudioTaskPayload
+ [id in VideoStudioTask['name']]: (
+ task: VideoStudioTask,
+ indice?: number,
+ files?: Express.Multer.File[]
+ ) => Promise<VideoStudioTaskPayload>
} = {
'add-intro': buildIntroOutroTask,
'add-outro': buildIntroOutroTask,
'add-watermark': buildWatermarkTask
}
-function buildTaskPayload (task: VideoStudioTask, indice: number, files: Express.Multer.File[]): VideoStudioTaskPayload {
+function buildTaskPayload (task: VideoStudioTask, indice: number, files: Express.Multer.File[]): Promise<VideoStudioTaskPayload> {
return taskPayloadBuilders[task.name](task, indice, files)
}
-function buildIntroOutroTask (task: VideoStudioTaskIntro | VideoStudioTaskOutro, indice: number, files: Express.Multer.File[]) {
+async function buildIntroOutroTask (task: VideoStudioTaskIntro | VideoStudioTaskOutro, indice: number, files: Express.Multer.File[]) {
+ const destination = await moveStudioFileToPersistentTMP(getTaskFileFromReq(files, indice).path)
+
return {
name: task.name,
options: {
- file: getTaskFile(files, indice).path
+ file: destination
}
}
}
function buildCutTask (task: VideoStudioTaskCut) {
- return {
+ return Promise.resolve({
name: task.name,
options: {
start: task.options.start,
end: task.options.end
}
- }
+ })
}
-function buildWatermarkTask (task: VideoStudioTaskWatermark, indice: number, files: Express.Multer.File[]) {
+async function buildWatermarkTask (task: VideoStudioTaskWatermark, indice: number, files: Express.Multer.File[]) {
+ const destination = await moveStudioFileToPersistentTMP(getTaskFileFromReq(files, indice).path)
+
return {
name: task.name,
options: {
- file: getTaskFile(files, indice).path
+ file: destination,
+ watermarkSizeRatio: VIDEO_FILTERS.WATERMARK.SIZE_RATIO,
+ horitonzalMarginRatio: VIDEO_FILTERS.WATERMARK.HORIZONTAL_MARGIN_RATIO,
+ verticalMarginRatio: VIDEO_FILTERS.WATERMARK.VERTICAL_MARGIN_RATIO
}
}
}
+
+async function moveStudioFileToPersistentTMP (file: string) {
+ const destination = getStudioTaskFilePath(basename(file))
+
+ await move(file, destination)
+
+ return destination
+}