]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/youtube-dl.ts
add user account email verificiation (#977)
[github/Chocobozzz/PeerTube.git] / server / helpers / youtube-dl.ts
index 77986f4078182241838443a80ef1b3d4c6ac43bc..0afc54fd24d5e22823c882b51f48a345e12ac09c 100644 (file)
@@ -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<YoutubeDLInfo> {
-  return new Promise<YoutubeDLInfo>((res, rej) => {
+  return new Promise<YoutubeDLInfo>(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<string>((res, rej) => {
+  return new Promise<string>(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 = {}