X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fyoutube-dl.ts;h=0afc54fd24d5e22823c882b51f48a345e12ac09c;hb=d9eaee3939bf2e93e5d775d32bce77842201faba;hp=c59ab9de072ef74ef3bbdb09a14055c51cd20ec2;hpb=3d52b300ea79bec21f090e2447c4808307078618;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/youtube-dl.ts b/server/helpers/youtube-dl.ts index c59ab9de0..0afc54fd2 100644 --- a/server/helpers/youtube-dl.ts +++ b/server/helpers/youtube-dl.ts @@ -1,24 +1,24 @@ -import * as youtubeDL from 'youtube-dl' import { truncate } from 'lodash' -import { CONFIG, CONSTRAINTS_FIELDS, VIDEO_CATEGORIES } from '../initializers' -import { join } from 'path' -import * as crypto from 'crypto' +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 - description: string - category: number - licence: number - nsfw: boolean - tags: string[] - thumbnailUrl: string + name?: string + description?: string + category?: number + licence?: number + nsfw?: boolean + tags?: string[] + thumbnailUrl?: string } 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) @@ -30,14 +30,14 @@ function getYoutubeDLInfo (url: string): Promise { } function downloadYoutubeDLVideo (url: string) { - const hash = crypto.createHash('sha256').update(url).digest('hex') - const path = join(CONFIG.STORAGE.VIDEOS_DIR, hash + '-import.mp4') + const path = generateVideoTmpPath(url) - logger.info('Importing video %s', url) + logger.info('Importing youtubeDL video %s', url) 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) @@ -55,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 = {}