]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/captions-utils.ts
Add ability to delete a specific video file
[github/Chocobozzz/PeerTube.git] / server / helpers / captions-utils.ts
index 401f2fb7b236cb4e7b177adfc31f1c380c6c34b3..f6e5b9784b0876bc2f4e93953722ad8dd6e09cb3 100644 (file)
@@ -1,8 +1,10 @@
 import { createReadStream, createWriteStream, move, remove } from 'fs-extra'
 import { join } from 'path'
-import * as srt2vtt from 'srt-to-vtt'
+import srt2vtt from 'srt-to-vtt'
+import { Transform } from 'stream'
 import { MVideoCaption } from '@server/types/models'
 import { CONFIG } from '../initializers/config'
+import { pipelinePromise } from './core-utils'
 
 async function moveAndProcessCaptionFile (physicalFile: { filename: string, path: string }, videoCaption: MVideoCaption) {
   const videoCaptionsDir = CONFIG.STORAGE.CAPTIONS_DIR
@@ -30,17 +32,22 @@ export {
 // ---------------------------------------------------------------------------
 
 function convertSrtToVtt (source: string, destination: string) {
-  return new Promise<void>((res, rej) => {
-    const file = createReadStream(source)
-    const converter = srt2vtt()
-    const writer = createWriteStream(destination)
+  const fixVTT = new Transform({
+    transform: (chunk, _encoding, cb) => {
+      let block: string = chunk.toString()
 
-    for (const s of [ file, converter, writer ]) {
-      s.on('error', err => rej(err))
-    }
+      block = block.replace(/(\d\d:\d\d:\d\d)(\s)/g, '$1.000$2')
+                   .replace(/(\d\d:\d\d:\d\d),(\d)(\s)/g, '$1.00$2$3')
+                   .replace(/(\d\d:\d\d:\d\d),(\d\d)(\s)/g, '$1.0$2$3')
 
-    return file.pipe(converter)
-               .pipe(writer)
-               .on('finish', () => res())
+      return cb(undefined, block)
+    }
   })
+
+  return pipelinePromise(
+    createReadStream(source),
+    srt2vtt(),
+    fixVTT,
+    createWriteStream(destination)
+  )
 }