]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/youtube-dl.ts
Check the comment is defined when validating body
[github/Chocobozzz/PeerTube.git] / server / helpers / youtube-dl.ts
index 748c67e6c6b65b97123c38b1c3099b8d2010ffb2..70b4e1b780aa0a95a1ccc45af2c37952dca7a9e7 100644 (file)
@@ -4,7 +4,7 @@ import { logger } from './logger'
 import { generateVideoTmpPath } from './utils'
 import { join } from 'path'
 import { root } from './core-utils'
-import { ensureDir, writeFile } from 'fs-extra'
+import { ensureDir, writeFile, remove } from 'fs-extra'
 import * as request from 'request'
 import { createWriteStream } from 'fs'
 
@@ -39,8 +39,9 @@ function getYoutubeDLInfo (url: string, opts?: string[]): Promise<YoutubeDLInfo>
   })
 }
 
-function downloadYoutubeDLVideo (url: string) {
+function downloadYoutubeDLVideo (url: string, timeout: number) {
   const path = generateVideoTmpPath(url)
+  let timer
 
   logger.info('Importing youtubeDL video %s', url)
 
@@ -49,10 +50,23 @@ function downloadYoutubeDLVideo (url: string) {
   return new Promise<string>(async (res, rej) => {
     const youtubeDL = await safeGetYoutubeDL()
     youtubeDL.exec(url, options, processOptions, err => {
-      if (err) return rej(err)
+      clearTimeout(timer)
+
+      if (err) {
+        remove(path)
+          .catch(err => logger.error('Cannot delete path on YoutubeDL error.', { err }))
+
+        return rej(err)
+      }
 
       return res(path)
     })
+
+    timer = setTimeout(async () => {
+      await remove(path)
+
+      return rej(new Error('YoutubeDL download timeout.'))
+    }, timeout)
   })
 }