]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/youtube-dl.ts
Delete correctly redundancy files
[github/Chocobozzz/PeerTube.git] / server / helpers / youtube-dl.ts
index db2bddf78cc3af8acd1beae2d016b858b8c06163..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'
 
@@ -18,9 +18,13 @@ export type YoutubeDLInfo = {
   thumbnailUrl?: string
 }
 
-function getYoutubeDLInfo (url: string): Promise<YoutubeDLInfo> {
+const processOptions = {
+  maxBuffer: 1024 * 1024 * 10 // 10MB
+}
+
+function getYoutubeDLInfo (url: string, opts?: string[]): Promise<YoutubeDLInfo> {
   return new Promise<YoutubeDLInfo>(async (res, rej) => {
-    const options = [ '-j', '--flat-playlist' ]
+    const options = opts || [ '-j', '--flat-playlist' ]
 
     const youtubeDL = await safeGetYoutubeDL()
     youtubeDL.getInfo(url, options, (err, info) => {
@@ -35,8 +39,9 @@ function getYoutubeDLInfo (url: 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)
 
@@ -44,11 +49,24 @@ function downloadYoutubeDLVideo (url: string) {
 
   return new Promise<string>(async (res, rej) => {
     const youtubeDL = await safeGetYoutubeDL()
-    youtubeDL.exec(url, options, err => {
-      if (err) return rej(err)
+    youtubeDL.exec(url, options, processOptions, 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)
   })
 }
 
@@ -110,16 +128,6 @@ async function updateYoutubeDLBinary () {
   })
 }
 
-// ---------------------------------------------------------------------------
-
-export {
-  updateYoutubeDLBinary,
-  downloadYoutubeDLVideo,
-  getYoutubeDLInfo
-}
-
-// ---------------------------------------------------------------------------
-
 async function safeGetYoutubeDL () {
   let youtubeDL
 
@@ -134,6 +142,17 @@ async function safeGetYoutubeDL () {
   return youtubeDL
 }
 
+// ---------------------------------------------------------------------------
+
+export {
+  updateYoutubeDLBinary,
+  downloadYoutubeDLVideo,
+  getYoutubeDLInfo,
+  safeGetYoutubeDL
+}
+
+// ---------------------------------------------------------------------------
+
 function normalizeObject (obj: any) {
   const newObj: any = {}