1 import express from 'express'
2 import { logger, loggerTagsFactory } from '@server/helpers/logger'
3 import { proxifyHLS, proxifyWebTorrentFile } from '@server/lib/object-storage'
4 import { VideoPathManager } from '@server/lib/video-path-manager'
5 import { asyncMiddleware } from '@server/middlewares'
6 import { jobOfRunnerGetValidator } from '@server/middlewares/validators/runners'
7 import { runnerJobGetVideoTranscodingFileValidator } from '@server/middlewares/validators/runners/job-files'
8 import { VideoStorage } from '@shared/models'
10 const lTags = loggerTagsFactory('api', 'runner')
12 const runnerJobFilesRouter = express.Router()
14 runnerJobFilesRouter.post('/jobs/:jobUUID/files/videos/:videoId/max-quality',
15 asyncMiddleware(jobOfRunnerGetValidator),
16 asyncMiddleware(runnerJobGetVideoTranscodingFileValidator),
17 asyncMiddleware(getMaxQualityVideoFile)
20 runnerJobFilesRouter.post('/jobs/:jobUUID/files/videos/:videoId/previews/max-quality',
21 asyncMiddleware(jobOfRunnerGetValidator),
22 asyncMiddleware(runnerJobGetVideoTranscodingFileValidator),
23 getMaxQualityVideoPreview
26 // ---------------------------------------------------------------------------
32 // ---------------------------------------------------------------------------
34 async function getMaxQualityVideoFile (req: express.Request, res: express.Response) {
35 const runnerJob = res.locals.runnerJob
36 const runner = runnerJob.Runner
37 const video = res.locals.videoAll
40 'Get max quality file of video %s of job %s for runner %s', video.uuid, runnerJob.uuid, runner.name,
41 lTags(runner.name, runnerJob.id, runnerJob.type)
44 const file = video.getMaxQualityFile()
46 if (file.storage === VideoStorage.OBJECT_STORAGE) {
51 filename: file.filename,
52 playlist: video.getHLSPlaylist(),
53 reinjectVideoFileToken: false,
59 return proxifyWebTorrentFile({
62 filename: file.filename
66 return VideoPathManager.Instance.makeAvailableVideoFile(file, videoPath => {
67 return res.sendFile(videoPath)
71 function getMaxQualityVideoPreview (req: express.Request, res: express.Response) {
72 const runnerJob = res.locals.runnerJob
73 const runner = runnerJob.Runner
74 const video = res.locals.videoAll
77 'Get max quality preview file of video %s of job %s for runner %s', video.uuid, runnerJob.uuid, runner.name,
78 lTags(runner.name, runnerJob.id, runnerJob.type)
81 const file = video.getPreview()
83 return res.sendFile(file.getPath())