]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/signup/signup.component.ts
Fix typo in privacy text
[github/Chocobozzz/PeerTube.git] / client / src / app / signup / signup.component.ts
CommitLineData
df98563e 1import { Component, OnInit } from '@angular/core'
df98563e 2import { Router } from '@angular/router'
5afdd0a5 3import { ServerService } from '@app/core/server'
df98563e 4import { NotificationsService } from 'angular2-notifications'
4771e000 5import { UserCreate } from '../../../../shared'
e309822b 6import { FormReactive, UserService, UserValidatorsService } from '../shared'
b1d40cff
C
7import { RedirectService } from '@app/core'
8import { I18n } from '@ngx-translate/i18n-polyfill'
d18d6478 9import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
a184c71b
C
10
11@Component({
12 selector: 'my-signup',
d235f6b0
C
13 templateUrl: './signup.component.html',
14 styleUrls: [ './signup.component.scss' ]
a184c71b
C
15})
16export class SignupComponent extends FormReactive implements OnInit {
df98563e 17 error: string = null
5afdd0a5 18 quotaHelpIndication = ''
a184c71b 19
df98563e 20 constructor (
d18d6478 21 protected formValidatorService: FormValidatorService,
e309822b 22 private userValidatorsService: UserValidatorsService,
a184c71b
C
23 private router: Router,
24 private notificationsService: NotificationsService,
5afdd0a5 25 private userService: UserService,
b1d40cff
C
26 private redirectService: RedirectService,
27 private serverService: ServerService,
28 private i18n: I18n
a184c71b 29 ) {
df98563e 30 super()
a184c71b
C
31 }
32
5afdd0a5
C
33 get initialUserVideoQuota () {
34 return this.serverService.getConfig().user.videoQuota
35 }
36
df98563e 37 ngOnInit () {
d18d6478 38 this.buildForm({
e309822b
C
39 username: this.userValidatorsService.USER_USERNAME,
40 password: this.userValidatorsService.USER_PASSWORD,
41 email: this.userValidatorsService.USER_EMAIL
d18d6478 42 })
5afdd0a5
C
43
44 this.serverService.configLoaded
45 .subscribe(() => this.buildQuotaHelpIndication())
a184c71b
C
46 }
47
df98563e
C
48 signup () {
49 this.error = null
a184c71b 50
4771e000 51 const userCreate: UserCreate = this.form.value
a184c71b 52
4771e000 53 this.userService.signup(userCreate).subscribe(
a184c71b 54 () => {
b1d40cff
C
55 this.notificationsService.success(
56 this.i18n('Success'),
25acef90 57 this.i18n('Registration for {{username}} complete.', { username: userCreate.username })
b1d40cff
C
58 )
59 this.redirectService.redirectToHomepage()
a184c71b
C
60 },
61
f7354483 62 err => this.error = err.message
df98563e 63 )
a184c71b 64 }
5afdd0a5 65
7a9fd8b5
C
66 private getApproximateTime (seconds: number) {
67 const hours = Math.floor(seconds / 3600)
68 let pluralSuffix = ''
69 if (hours > 1) pluralSuffix = 's'
70 if (hours > 0) return `~ ${hours} hour${pluralSuffix}`
71
72 const minutes = Math.floor(seconds % 3600 / 60)
73 if (minutes > 1) pluralSuffix = 's'
74
75 return this.i18n('~ {{minutes}} {minutes, plural, =1 {minute} other {minutes}}', { minutes })
76 }
77
5afdd0a5
C
78 private buildQuotaHelpIndication () {
79 if (this.initialUserVideoQuota === -1) return
80
81 const initialUserVideoQuotaBit = this.initialUserVideoQuota * 8
82
83 // 1080p: ~ 6Mbps
84 // 720p: ~ 4Mbps
85 // 360p: ~ 1.5Mbps
86 const fullHdSeconds = initialUserVideoQuotaBit / (6 * 1000 * 1000)
87 const hdSeconds = initialUserVideoQuotaBit / (4 * 1000 * 1000)
88 const normalSeconds = initialUserVideoQuotaBit / (1.5 * 1000 * 1000)
89
90 const lines = [
7a9fd8b5
C
91 this.i18n('{{seconds}} of full HD videos', { seconds: this.getApproximateTime(fullHdSeconds) }),
92 this.i18n('{{seconds}} of HD videos', { seconds: this.getApproximateTime(hdSeconds) }),
93 this.i18n('{{seconds}} of average quality videos', { seconds: this.getApproximateTime(normalSeconds) })
5afdd0a5
C
94 ]
95
96 this.quotaHelpIndication = lines.join('<br />')
97 }
a184c71b 98}