X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftools%2Fpeertube-import-videos.ts;h=d04ddfe06dbd69f73cc2caa4b24072b5e4001ce0;hb=30664eb856ac38b26f8cf7b07bdf9fde3f78f037;hp=7f3b58bba7a37d715a3e3add8d4539833b11273f;hpb=bdd428a6d9138d751f8cde82867022a93f1a76cc;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tools/peertube-import-videos.ts b/server/tools/peertube-import-videos.ts index 7f3b58bba..d04ddfe06 100644 --- a/server/tools/peertube-import-videos.ts +++ b/server/tools/peertube-import-videos.ts @@ -72,38 +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[] + 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)) + // 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) + log.info('Will download and upload %d videos.\n', infoArray.length) - for (const info of infoArray) { + 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: { @@ -393,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) + }) + }) +}