diff options
Diffstat (limited to 'server/tools/peertube-upload.ts')
-rw-r--r-- | server/tools/peertube-upload.ts | 91 |
1 files changed, 36 insertions, 55 deletions
diff --git a/server/tools/peertube-upload.ts b/server/tools/peertube-upload.ts index 687f2e60b..c00205e8f 100644 --- a/server/tools/peertube-upload.ts +++ b/server/tools/peertube-upload.ts | |||
@@ -3,54 +3,47 @@ import { access, constants } from 'fs-extra' | |||
3 | import { isAbsolute } from 'path' | 3 | import { isAbsolute } from 'path' |
4 | import { getClient, login } from '../../shared/extra-utils' | 4 | import { getClient, login } from '../../shared/extra-utils' |
5 | import { uploadVideo } from '../../shared/extra-utils/' | 5 | import { uploadVideo } from '../../shared/extra-utils/' |
6 | import { VideoPrivacy } from '../../shared/models/videos' | 6 | import { buildCommonVideoOptions, buildVideoAttributesFromCommander, getNetrc, getRemoteObjectOrDie, getSettings } from './cli' |
7 | import { getRemoteObjectOrDie, getSettings } from './cli' | ||
8 | 7 | ||
9 | program | 8 | let command = program |
10 | .name('upload') | 9 | .name('upload') |
10 | |||
11 | command = buildCommonVideoOptions(command) | ||
12 | |||
13 | command | ||
14 | |||
11 | .option('-u, --url <url>', 'Server url') | 15 | .option('-u, --url <url>', 'Server url') |
12 | .option('-U, --username <username>', 'Username') | 16 | .option('-U, --username <username>', 'Username') |
13 | .option('-p, --password <token>', 'Password') | 17 | .option('-p, --password <token>', 'Password') |
14 | .option('-n, --video-name <name>', 'Video name') | ||
15 | .option('-P, --privacy <privacy_number>', 'Privacy') | ||
16 | .option('-N, --nsfw', 'Video is Not Safe For Work') | ||
17 | .option('-c, --category <category_number>', 'Category number') | ||
18 | .option('-C, --channel-id <channel_id>', 'Channel ID') | ||
19 | .option('-m, --comments-enabled', 'Enable comments') | ||
20 | .option('-l, --licence <licence_number>', 'Licence number') | ||
21 | .option('-L, --language <language_code>', 'Language ISO 639 code (fr or en...)') | ||
22 | .option('-d, --video-description <description>', 'Video description') | ||
23 | .option('-t, --tags <tags>', 'Video tags', list) | ||
24 | .option('-b, --thumbnail <thumbnailPath>', 'Thumbnail path') | 18 | .option('-b, --thumbnail <thumbnailPath>', 'Thumbnail path') |
25 | .option('-v, --preview <previewPath>', 'Preview path') | 19 | .option('-v, --preview <previewPath>', 'Preview path') |
26 | .option('-f, --file <file>', 'Video absolute file path') | 20 | .option('-f, --file <file>', 'Video absolute file path') |
27 | .parse(process.argv) | 21 | .parse(process.argv) |
28 | 22 | ||
29 | getSettings() | 23 | Promise.all([ getSettings(), getNetrc() ]) |
30 | .then(settings => { | 24 | .then(([ settings, netrc ]) => { |
31 | const { url, username, password } = getRemoteObjectOrDie(program, settings) | 25 | const { url, username, password } = getRemoteObjectOrDie(program, settings, netrc) |
32 | 26 | ||
33 | if (!program['videoName'] || !program['file'] || !program['channelId']) { | 27 | if (!program[ 'videoName' ] || !program[ 'file' ]) { |
34 | if (!program['videoName']) console.error('--video-name is required.') | 28 | if (!program[ 'videoName' ]) console.error('--video-name is required.') |
35 | if (!program['file']) console.error('--file is required.') | 29 | if (!program[ 'file' ]) console.error('--file is required.') |
36 | if (!program['channelId']) console.error('--channel-id is required.') | ||
37 | 30 | ||
38 | process.exit(-1) | 31 | process.exit(-1) |
39 | } | 32 | } |
40 | 33 | ||
41 | if (isAbsolute(program['file']) === false) { | 34 | if (isAbsolute(program[ 'file' ]) === false) { |
42 | console.error('File path should be absolute.') | 35 | console.error('File path should be absolute.') |
43 | process.exit(-1) | 36 | process.exit(-1) |
44 | } | 37 | } |
45 | 38 | ||
46 | run(url, username, password).catch(err => { | 39 | run(url, username, password).catch(err => { |
47 | console.error(err) | 40 | console.error(err) |
48 | process.exit(-1) | 41 | process.exit(-1) |
49 | }) | 42 | }) |
50 | }) | 43 | }) |
51 | 44 | ||
52 | async function run (url: string, username: string, password: string) { | 45 | async function run (url: string, username: string, password: string) { |
53 | const resClient = await getClient(program[ 'url' ]) | 46 | const resClient = await getClient(url) |
54 | const client = { | 47 | const client = { |
55 | id: resClient.body.client_id, | 48 | id: resClient.body.client_id, |
56 | secret: resClient.body.client_secret | 49 | secret: resClient.body.client_secret |
@@ -70,38 +63,26 @@ async function run (url: string, username: string, password: string) { | |||
70 | 63 | ||
71 | console.log('Uploading %s video...', program[ 'videoName' ]) | 64 | console.log('Uploading %s video...', program[ 'videoName' ]) |
72 | 65 | ||
73 | const videoAttributes = { | 66 | const defaultAttributes = { |
74 | name: program['videoName'], | 67 | tags: command[ 'tags' ], |
75 | category: program['category'] || undefined, | 68 | description: command[ 'videoDescription' ] |
76 | channelId: program['channelId'], | ||
77 | licence: program['licence'] || undefined, | ||
78 | language: program['language'] || undefined, | ||
79 | nsfw: program['nsfw'] !== undefined ? program['nsfw'] : false, | ||
80 | description: program['videoDescription'] || '', | ||
81 | tags: program['tags'] || [], | ||
82 | commentsEnabled: program['commentsEnabled'] !== undefined ? program['commentsEnabled'] : true, | ||
83 | downloadEnabled: program['downloadEnabled'] !== undefined ? program['downloadEnabled'] : true, | ||
84 | fixture: program['file'], | ||
85 | thumbnailfile: program['thumbnail'], | ||
86 | previewfile: program['preview'], | ||
87 | waitTranscoding: true, | ||
88 | privacy: program['privacy'] || VideoPrivacy.PUBLIC, | ||
89 | support: undefined | ||
90 | } | 69 | } |
70 | const videoAttributes = await buildVideoAttributesFromCommander(url, program, defaultAttributes) | ||
71 | |||
72 | Object.assign(videoAttributes, { | ||
73 | fixture: program[ 'file' ], | ||
74 | thumbnailfile: program[ 'thumbnail' ], | ||
75 | previewfile: program[ 'preview' ] | ||
76 | }) | ||
91 | 77 | ||
92 | try { | 78 | try { |
93 | await uploadVideo(url, accessToken, videoAttributes) | 79 | await uploadVideo(url, accessToken, videoAttributes) |
94 | console.log(`Video ${program['videoName']} uploaded.`) | 80 | console.log(`Video ${program[ 'videoName' ]} uploaded.`) |
95 | process.exit(0) | 81 | process.exit(0) |
96 | } catch (err) { | 82 | } catch (err) { |
97 | console.log('coucou') | ||
98 | console.error(require('util').inspect(err)) | 83 | console.error(require('util').inspect(err)) |
99 | process.exit(-1) | 84 | process.exit(-1) |
100 | } | 85 | } |
101 | } | 86 | } |
102 | 87 | ||
103 | // ---------------------------------------------------------------------------- | 88 | // ---------------------------------------------------------------------------- |
104 | |||
105 | function list (val) { | ||
106 | return val.split(',') | ||
107 | } | ||