+// ---------------------------------------------------------------------------
+// Job handlers
+// ---------------------------------------------------------------------------
+
+async function handleHLSJob (job: Job, payload: HLSTranscodingPayload, video: MVideoFullLight, user: MUser) {
+ logger.info('Handling HLS transcoding job for %s.', video.uuid, lTags(video.uuid))
+
+ const videoFileInput = payload.copyCodecs
+ ? video.getWebTorrentFile(payload.resolution)
+ : video.getMaxQualityFile()
+
+ const videoOrStreamingPlaylist = videoFileInput.getVideoOrStreamingPlaylist()
+
+ await VideoPathManager.Instance.makeAvailableVideoFile(videoOrStreamingPlaylist, videoFileInput, videoInputPath => {
+ return generateHlsPlaylistResolution({
+ video,
+ videoInputPath,
+ resolution: payload.resolution,
+ copyCodecs: payload.copyCodecs,
+ isPortraitMode: payload.isPortraitMode || false,
+ job
+ })
+ })
+
+ logger.info('HLS transcoding job for %s ended.', video.uuid, lTags(video.uuid))
+
+ await retryTransactionWrapper(onHlsPlaylistGeneration, video, user, payload)
+}
+
+async function handleNewWebTorrentResolutionJob (
+ job: Job,
+ payload: NewResolutionTranscodingPayload,
+ video: MVideoFullLight,
+ user: MUserId
+) {
+ logger.info('Handling WebTorrent transcoding job for %s.', video.uuid, lTags(video.uuid))
+
+ await transcodeNewWebTorrentResolution(video, payload.resolution, payload.isPortraitMode || false, job)
+
+ logger.info('WebTorrent transcoding job for %s ended.', video.uuid, lTags(video.uuid))
+
+ await retryTransactionWrapper(onNewWebTorrentFileResolution, video, user, payload)
+}
+
+async function handleWebTorrentMergeAudioJob (job: Job, payload: MergeAudioTranscodingPayload, video: MVideoFullLight, user: MUserId) {
+ logger.info('Handling merge audio transcoding job for %s.', video.uuid, lTags(video.uuid))
+
+ await mergeAudioVideofile(video, payload.resolution, job)
+
+ logger.info('Merge audio transcoding job for %s ended.', video.uuid, lTags(video.uuid))
+
+ await retryTransactionWrapper(onVideoFileOptimizer, video, payload, 'video', user)
+}