aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/helpers/youtube-dl.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/helpers/youtube-dl.ts')
-rw-r--r--server/helpers/youtube-dl.ts20
1 files changed, 17 insertions, 3 deletions
diff --git a/server/helpers/youtube-dl.ts b/server/helpers/youtube-dl.ts
index 748c67e6c..70b4e1b78 100644
--- a/server/helpers/youtube-dl.ts
+++ b/server/helpers/youtube-dl.ts
@@ -4,7 +4,7 @@ import { logger } from './logger'
4import { generateVideoTmpPath } from './utils' 4import { generateVideoTmpPath } from './utils'
5import { join } from 'path' 5import { join } from 'path'
6import { root } from './core-utils' 6import { root } from './core-utils'
7import { ensureDir, writeFile } from 'fs-extra' 7import { ensureDir, writeFile, remove } from 'fs-extra'
8import * as request from 'request' 8import * as request from 'request'
9import { createWriteStream } from 'fs' 9import { createWriteStream } from 'fs'
10 10
@@ -39,8 +39,9 @@ function getYoutubeDLInfo (url: string, opts?: string[]): Promise<YoutubeDLInfo>
39 }) 39 })
40} 40}
41 41
42function downloadYoutubeDLVideo (url: string) { 42function downloadYoutubeDLVideo (url: string, timeout: number) {
43 const path = generateVideoTmpPath(url) 43 const path = generateVideoTmpPath(url)
44 let timer
44 45
45 logger.info('Importing youtubeDL video %s', url) 46 logger.info('Importing youtubeDL video %s', url)
46 47
@@ -49,10 +50,23 @@ function downloadYoutubeDLVideo (url: string) {
49 return new Promise<string>(async (res, rej) => { 50 return new Promise<string>(async (res, rej) => {
50 const youtubeDL = await safeGetYoutubeDL() 51 const youtubeDL = await safeGetYoutubeDL()
51 youtubeDL.exec(url, options, processOptions, err => { 52 youtubeDL.exec(url, options, processOptions, err => {
52 if (err) return rej(err) 53 clearTimeout(timer)
54
55 if (err) {
56 remove(path)
57 .catch(err => logger.error('Cannot delete path on YoutubeDL error.', { err }))
58
59 return rej(err)
60 }
53 61
54 return res(path) 62 return res(path)
55 }) 63 })
64
65 timer = setTimeout(async () => {
66 await remove(path)
67
68 return rej(new Error('YoutubeDL download timeout.'))
69 }, timeout)
56 }) 70 })
57} 71}
58 72