]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/captions-utils.ts
Add quota used in users list
[github/Chocobozzz/PeerTube.git] / server / helpers / captions-utils.ts
CommitLineData
f4001cf4
C
1import { renamePromise, unlinkPromise } from './core-utils'
2import { join } from 'path'
3import { CONFIG } from '../initializers'
4import { VideoCaptionModel } from '../models/video/video-caption'
5import * as srt2vtt from 'srt-to-vtt'
6import { createReadStream, createWriteStream } from 'fs'
7
8async 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
27export {
28 moveAndProcessCaptionFile
29}
30
31// ---------------------------------------------------------------------------
32
33function 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}