import { logger, loggerTagsFactory } from '../logger'
import { getProxy, isProxyEnabled } from '../proxy'
import { isBinaryResponse, peertubeGot } from '../requests'
+import { OptionsOfBufferResponseBody } from 'got/dist/source'
const lTags = loggerTagsFactory('youtube-dl')
logger.info('Updating youtubeDL binary from %s.', url, lTags())
- const gotOptions = { context: { bodyKBLimit: 20_000 }, responseType: 'buffer' as 'buffer' }
+ const gotOptions: OptionsOfBufferResponseBody = {
+ context: { bodyKBLimit: 20_000 },
+ responseType: 'buffer' as 'buffer'
+ }
+
+ if (process.env.YOUTUBE_DL_DOWNLOAD_BEARER_TOKEN) {
+ gotOptions.headers = {
+ authorization: 'Bearer ' + process.env.YOUTUBE_DL_DOWNLOAD_BEARER_TOKEN
+ }
+ }
try {
let gotResult = await peertubeGot(url, gotOptions)
const data = await this.run({ url, args: completeArgs, processOptions })
if (!data) return undefined
- const info = data.map(this.parseInfo)
+ const info = data.map(d => JSON.parse(d))
return info.length === 1
? info[0]
: info
}
- getListInfo (options: {
+ async getListInfo (options: {
url: string
latestVideosCount?: number
processOptions: execa.NodeOptions
}): Promise<{ upload_date: string, webpage_url: string }[]> {
const additionalYoutubeDLArgs = [ '--skip-download', '--playlist-reverse' ]
+ if (CONFIG.IMPORT.VIDEOS.HTTP.YOUTUBE_DL_RELEASE.NAME === 'yt-dlp') {
+ // Optimize listing videos only when using yt-dlp because it is bugged with youtube-dl when fetching a channel
+ additionalYoutubeDLArgs.push('--flat-playlist')
+ }
+
if (options.latestVideosCount !== undefined) {
additionalYoutubeDLArgs.push('--playlist-end', options.latestVideosCount.toString())
}
- return this.getInfo({
+ const result = await this.getInfo({
url: options.url,
format: YoutubeDLCLI.getYoutubeDLVideoFormat([], false),
processOptions: options.processOptions,
additionalYoutubeDLArgs
})
+
+ if (!result) return result
+ if (!Array.isArray(result)) return [ result ]
+
+ return result
}
async getSubs (options: {
return args
}
-
- private parseInfo (data: string) {
- return JSON.parse(data)
- }
}