X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fyoutube-dl%2Fyoutube-dl-wrapper.ts;h=966b8df78e096a6d96df3e76cdc67a800a8ecdf3;hb=4638cd713dcdd007cd7f49b9a95fa62ac7823e7c;hp=d585e9a95707ac80085131188e706bd752016a06;hpb=8296984de4b085231fb1a96c8456a2d79a8ded0c;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/youtube-dl/youtube-dl-wrapper.ts b/server/helpers/youtube-dl/youtube-dl-wrapper.ts index d585e9a95..966b8df78 100644 --- a/server/helpers/youtube-dl/youtube-dl-wrapper.ts +++ b/server/helpers/youtube-dl/youtube-dl-wrapper.ts @@ -1,5 +1,6 @@ import { move, pathExists, readdir, remove } from 'fs-extra' import { dirname, join } from 'path' +import { inspect } from 'util' import { CONFIG } from '@server/initializers/config' import { isVideoFileExtnameValid } from '../custom-validators/videos' import { logger, loggerTagsFactory } from '../logger' @@ -21,7 +22,11 @@ const processOptions = { class YoutubeDLWrapper { - constructor (private readonly url: string = '', private readonly enabledResolutions: number[] = []) { + constructor ( + private readonly url: string, + private readonly enabledResolutions: number[], + private readonly useBestFormat: boolean + ) { } @@ -30,11 +35,13 @@ class YoutubeDLWrapper { const info = await youtubeDL.getInfo({ url: this.url, - format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions), + format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions, this.useBestFormat), additionalYoutubeDLArgs: youtubeDLArgs, processOptions }) + if (!info) throw new Error(`YoutubeDL could not get info from ${this.url}`) + if (info.is_live === true) throw new Error('Cannot download a live streaming.') const infoBuilder = new YoutubeDLInfoBuilder(info) @@ -42,6 +49,22 @@ class YoutubeDLWrapper { return infoBuilder.getInfo() } + async getInfoForListImport (options: { + latestVideosCount?: number + }) { + const youtubeDL = await YoutubeDLCLI.safeGet() + + const list = await youtubeDL.getListInfo({ + url: this.url, + latestVideosCount: options.latestVideosCount, + processOptions + }) + + if (!Array.isArray(list)) throw new Error(`YoutubeDL could not get list info from ${this.url}: ${inspect(list)}`) + + return list.map(info => info.webpage_url) + } + async getSubtitles (): Promise { const cwd = CONFIG.STORAGE.TMP_DIR @@ -80,7 +103,7 @@ class YoutubeDLWrapper { try { await youtubeDL.download({ url: this.url, - format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions), + format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions, this.useBestFormat), output: pathWithoutExtension, timeout, processOptions @@ -99,7 +122,7 @@ class YoutubeDLWrapper { return remove(path) }) - .catch(innerErr => logger.error('Cannot remove file in youtubeDL timeout.', { innerErr, ...lTags() })) + .catch(innerErr => logger.error('Cannot remove file in youtubeDL error.', { innerErr, ...lTags() })) throw err }