X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftools%2Fpeertube-import-videos.ts;h=04e24e81847bbc60ce67a57e6a5e5367ee05f4d4;hb=c74c9be934fa1584edf6f4f7a41f00c4d3f2a8b3;hp=675c621dfdc93b834b9c19b7fbf396039ca74158;hpb=156c50af3085468a47b8ae73fe8cfcae46b42398;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tools/peertube-import-videos.ts b/server/tools/peertube-import-videos.ts index 675c621df..04e24e818 100644 --- a/server/tools/peertube-import-videos.ts +++ b/server/tools/peertube-import-videos.ts @@ -6,11 +6,12 @@ import { join } from 'path' import { VideoPrivacy } from '../../shared/models/videos' import { doRequestAndSaveToFile } from '../helpers/requests' import { CONSTRAINTS_FIELDS } from '../initializers' -import { getClient, getVideoCategories, login, searchVideoWithSort, uploadVideo } from '../tests/utils' +import { getClient, getVideoCategories, login, searchVideoWithSort, uploadVideo } from '../../shared/utils/index' import { truncate } from 'lodash' import * as prompt from 'prompt' import { remove } from 'fs-extra' -import { safeGetYoutubeDL } from '../helpers/youtube-dl' +import { sha256 } from '../helpers/core-utils' +import { safeGetYoutubeDL, buildOriginallyPublishedAt } from '../helpers/youtube-dl' import { getSettings, netrc } from './cli' let accessToken: string @@ -57,6 +58,7 @@ getSettings() settings.remotes[settings.default] : settings.remotes[0] } + if (!program['username']) program['username'] = netrc.machines[program['url']].login if (!program['password']) program['password'] = netrc.machines[program['url']].password } @@ -68,12 +70,19 @@ getSettings() process.exit(-1) } + removeEndSlashes(program['url']) + removeEndSlashes(program['targetUrl']) + const user = { username: program['username'], password: program['password'] } - run(user, program['url']).catch(err => console.error(err)) + run(user, program['url']) + .catch(err => { + console.error(err) + process.exit(-1) + }) }) async function promptPassword () { @@ -107,8 +116,12 @@ async function run (user, url: string) { secret: res.body.client_secret } - const res2 = await login(url, client, user) - accessToken = res2.body.access_token + try { + const res = await login(program[ 'url' ], client, user) + accessToken = res.body.access_token + } catch (err) { + throw new Error('Cannot authenticate. Please check your username/password.') + } const youtubeDL = await safeGetYoutubeDL() @@ -133,8 +146,7 @@ async function run (user, url: string) { await processVideo(info, program['language'], processOptions.cwd, url, user) } - // https://www.youtube.com/watch?v=2Upx39TBc1s - console.log('I\'m finished!') + console.log('Video/s for user %s imported: %s', program['username'], program['targetUrl']) process.exit(0) }) } @@ -155,7 +167,7 @@ function processVideo (info: any, languageCode: string, cwd: string, url: string return res() } - const path = join(cwd, new Date().getTime() + '.mp4') + const path = join(cwd, sha256(videoInfo.url) + '.mp4') console.log('Downloading video "%s"...', videoInfo.title) @@ -192,7 +204,7 @@ async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string, cwd: st let thumbnailfile if (videoInfo.thumbnail) { - thumbnailfile = join(cwd, 'thumbnail.jpg') + thumbnailfile = join(cwd, sha256(videoInfo.thumbnail) + '.jpg') await doRequestAndSaveToFile({ method: 'GET', @@ -200,6 +212,8 @@ async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string, cwd: st }, thumbnailfile) } + const originallyPublishedAt = buildOriginallyPublishedAt(videoInfo) + const videoAttributes = { name: truncate(videoInfo.title, { 'length': CONSTRAINTS_FIELDS.VIDEOS.NAME.max, @@ -212,14 +226,15 @@ async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string, cwd: st nsfw: isNSFW(videoInfo), waitTranscoding: true, commentsEnabled: true, - downloadingEnabled: true, + downloadEnabled: true, description: videoInfo.description || undefined, support: undefined, tags, privacy: VideoPrivacy.PUBLIC, fixture: videoPath, thumbnailfile, - previewfile: thumbnailfile + previewfile: thumbnailfile, + originallyPublishedAt: originallyPublishedAt ? originallyPublishedAt.toISOString() : null } console.log('\nUploading on PeerTube video "%s".', videoAttributes.name) @@ -322,3 +337,9 @@ function isNSFW (info: any) { return false } + +function removeEndSlashes (url: string) { + while (url.endsWith('/')) { + url.slice(0, -1) + } +}