]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/signup/signup.component.ts
Improve follow component routing
[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,
b4a929ac
C
41 email: this.userValidatorsService.USER_EMAIL,
42 terms: this.userValidatorsService.USER_TERMS
d18d6478 43 })
5afdd0a5
C
44
45 this.serverService.configLoaded
46 .subscribe(() => this.buildQuotaHelpIndication())
a184c71b
C
47 }
48
df98563e
C
49 signup () {
50 this.error = null
a184c71b 51
4771e000 52 const userCreate: UserCreate = this.form.value
a184c71b 53
4771e000 54 this.userService.signup(userCreate).subscribe(
a184c71b 55 () => {
b1d40cff
C
56 this.notificationsService.success(
57 this.i18n('Success'),
25acef90 58 this.i18n('Registration for {{username}} complete.', { username: userCreate.username })
b1d40cff
C
59 )
60 this.redirectService.redirectToHomepage()
a184c71b
C
61 },
62
f7354483 63 err => this.error = err.message
df98563e 64 )
a184c71b 65 }
5afdd0a5 66
7a9fd8b5
C
67 private getApproximateTime (seconds: number) {
68 const hours = Math.floor(seconds / 3600)
69 let pluralSuffix = ''
70 if (hours > 1) pluralSuffix = 's'
71 if (hours > 0) return `~ ${hours} hour${pluralSuffix}`
72
73 const minutes = Math.floor(seconds % 3600 / 60)
74 if (minutes > 1) pluralSuffix = 's'
75
76 return this.i18n('~ {{minutes}} {minutes, plural, =1 {minute} other {minutes}}', { minutes })
77 }
78
5afdd0a5
C
79 private buildQuotaHelpIndication () {
80 if (this.initialUserVideoQuota === -1) return
81
82 const initialUserVideoQuotaBit = this.initialUserVideoQuota * 8
83
84 // 1080p: ~ 6Mbps
85 // 720p: ~ 4Mbps
86 // 360p: ~ 1.5Mbps
87 const fullHdSeconds = initialUserVideoQuotaBit / (6 * 1000 * 1000)
88 const hdSeconds = initialUserVideoQuotaBit / (4 * 1000 * 1000)
89 const normalSeconds = initialUserVideoQuotaBit / (1.5 * 1000 * 1000)
90
91 const lines = [
7a9fd8b5
C
92 this.i18n('{{seconds}} of full HD videos', { seconds: this.getApproximateTime(fullHdSeconds) }),
93 this.i18n('{{seconds}} of HD videos', { seconds: this.getApproximateTime(hdSeconds) }),
94 this.i18n('{{seconds}} of average quality videos', { seconds: this.getApproximateTime(normalSeconds) })
5afdd0a5
C
95 ]
96
97 this.quotaHelpIndication = lines.join('<br />')
98 }
a184c71b 99}