X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fyoutube-dl.ts;h=0afc54fd24d5e22823c882b51f48a345e12ac09c;hb=d9eaee3939bf2e93e5d775d32bce77842201faba;hp=77986f4078182241838443a80ef1b3d4c6ac43bc;hpb=ce33919c24e7402d92d81f3cd8e545df52d98240;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/youtube-dl.ts b/server/helpers/youtube-dl.ts index 77986f407..0afc54fd2 100644 --- a/server/helpers/youtube-dl.ts +++ b/server/helpers/youtube-dl.ts @@ -1,8 +1,8 @@ -import * as youtubeDL from 'youtube-dl' import { truncate } from 'lodash' import { CONSTRAINTS_FIELDS, VIDEO_CATEGORIES } from '../initializers' import { logger } from './logger' import { generateVideoTmpPath } from './utils' +import { YoutubeDlUpdateScheduler } from '../lib/schedulers/youtube-dl-update-scheduler' export type YoutubeDLInfo = { name?: string @@ -15,9 +15,10 @@ export type YoutubeDLInfo = { } function getYoutubeDLInfo (url: string): Promise { - return new Promise((res, rej) => { + return new Promise(async (res, rej) => { const options = [ '-j', '--flat-playlist' ] + const youtubeDL = await safeGetYoutubeDL() youtubeDL.getInfo(url, options, (err, info) => { if (err) return rej(err) @@ -35,7 +36,8 @@ function downloadYoutubeDLVideo (url: string) { const options = [ '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best', '-o', path ] - return new Promise((res, rej) => { + return new Promise(async (res, rej) => { + const youtubeDL = await safeGetYoutubeDL() youtubeDL.exec(url, options, async (err, output) => { if (err) return rej(err) @@ -53,6 +55,20 @@ export { // --------------------------------------------------------------------------- +async function safeGetYoutubeDL () { + let youtubeDL + + try { + youtubeDL = require('youtube-dl') + } catch (e) { + // Download binary + await YoutubeDlUpdateScheduler.Instance.execute() + youtubeDL = require('youtube-dl') + } + + return youtubeDL +} + function normalizeObject (obj: any) { const newObj: any = {}