]>
Commit | Line | Data |
---|---|---|
f4001cf4 C |
1 | import { renamePromise, unlinkPromise } from './core-utils' |
2 | import { join } from 'path' | |
3 | import { CONFIG } from '../initializers' | |
4 | import { VideoCaptionModel } from '../models/video/video-caption' | |
5 | import * as srt2vtt from 'srt-to-vtt' | |
6 | import { createReadStream, createWriteStream } from 'fs' | |
7 | ||
8 | async function moveAndProcessCaptionFile (physicalFile: { filename: string, path: string }, videoCaption: VideoCaptionModel) { | |
9 | const videoCaptionsDir = CONFIG.STORAGE.CAPTIONS_DIR | |
10 | const destination = join(videoCaptionsDir, videoCaption.getCaptionName()) | |
11 | ||
12 | // Convert this srt file to vtt | |
13 | if (physicalFile.path.endsWith('.srt')) { | |
14 | await convertSrtToVtt(physicalFile.path, destination) | |
15 | await unlinkPromise(physicalFile.path) | |
16 | } else { // Just move the vtt file | |
17 | await renamePromise(physicalFile.path, destination) | |
18 | } | |
19 | ||
20 | // This is important in case if there is another attempt in the retry process | |
21 | physicalFile.filename = videoCaption.getCaptionName() | |
22 | physicalFile.path = destination | |
23 | } | |
24 | ||
25 | // --------------------------------------------------------------------------- | |
26 | ||
27 | export { | |
28 | moveAndProcessCaptionFile | |
29 | } | |
30 | ||
31 | // --------------------------------------------------------------------------- | |
32 | ||
33 | function convertSrtToVtt (source: string, destination: string) { | |
34 | return new Promise((res, rej) => { | |
35 | const file = createReadStream(source) | |
36 | const converter = srt2vtt() | |
37 | const writer = createWriteStream(destination) | |
38 | ||
39 | for (const s of [ file, converter, writer ]) { | |
40 | s.on('error', err => rej(err)) | |
41 | } | |
42 | ||
43 | return file.pipe(converter) | |
44 | .pipe(writer) | |
45 | .on('finish', () => res()) | |
46 | }) | |
47 | } |