From de29e90c373c12a32bbce7b75d2017affc3ee16e Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 17 Nov 2020 15:28:24 +0100 Subject: [PATCH] Fix CLI import script --- server/tools/peertube-import-videos.ts | 78 +++++++++++++++----------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/server/tools/peertube-import-videos.ts b/server/tools/peertube-import-videos.ts index 2c9eabe98..d04ddfe06 100644 --- a/server/tools/peertube-import-videos.ts +++ b/server/tools/peertube-import-videos.ts @@ -72,42 +72,42 @@ async function run (url: string, user: UserInfo) { const youtubeDL = await safeGetYoutubeDL() - const options = [ '-j', '--flat-playlist', '--playlist-reverse', ...command.args ] + let info = await getYoutubeDLInfo(youtubeDL, program['targetUrl'], command.args) - youtubeDL.getInfo(program['targetUrl'], options, processOptions, async (err, info) => { - if (err) { - exitError(err.stderr + ' ' + err.message) + if (info?.title === 'Uploads') { + console.log('Fixing URL to %s.', info.url) + + info = await getYoutubeDLInfo(youtubeDL, info.url, command.args) + } + + let infoArray: any[] + + // Normalize utf8 fields + infoArray = [].concat(info) + if (program['first']) { + infoArray = infoArray.slice(0, program['first']) + } else if (program['last']) { + infoArray = infoArray.slice(-program['last']) + } + infoArray = infoArray.map(i => normalizeObject(i)) + + log.info('Will download and upload %d videos.\n', infoArray.length) + + for (const info of infoArray) { + try { + await processVideo({ + cwd: program['tmpdir'], + url, + user, + youtubeInfo: info + }) + } catch (err) { + console.error('Cannot process video.', { info, url }) } + } - let infoArray: any[] - - // Normalize utf8 fields - infoArray = [].concat(info) - if (program['first']) { - infoArray = infoArray.slice(0, program['first']) - } else if (program['last']) { - infoArray = infoArray.slice(-program['last']) - } - infoArray = infoArray.map(i => normalizeObject(i)) - - log.info('Will download and upload %d videos.\n', infoArray.length) - - for (const info of infoArray) { - try { - await processVideo({ - cwd: program['tmpdir'], - url, - user, - youtubeInfo: info - }) - } catch (err) { - console.error('Cannot process video.', { info, url }) - } - } - - log.info('Video/s for user %s imported: %s', user.username, program['targetUrl']) - process.exit(0) - }) + log.info('Video/s for user %s imported: %s', user.username, program['targetUrl']) + process.exit(0) } function processVideo (parameters: { @@ -397,3 +397,15 @@ function exitError (message: string, ...meta: any[]) { console.error(message, ...meta) process.exit(-1) } + +function getYoutubeDLInfo (youtubeDL: any, url: string, args: string[]) { + return new Promise((res, rej) => { + const options = [ '-j', '--flat-playlist', '--playlist-reverse', ...args ] + + youtubeDL.getInfo(url, options, processOptions, async (err, info) => { + if (err) return rej(err) + + return res(info) + }) + }) +}