From 6a84aafd23c2f887f837cc4826cf7c8c07d1c60f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 19 Oct 2017 17:33:32 +0200 Subject: Take in account transcoding for video quota --- .../+admin/users/user-edit/user-add.component.ts | 5 ++++- .../users/user-edit/user-edit.component.html | 5 +++++ .../users/user-edit/user-edit.component.scss | 4 ++++ client/src/app/+admin/users/user-edit/user-edit.ts | 24 +++++++++++++++++++++- .../users/user-edit/user-update.component.ts | 7 +++++-- client/src/app/core/server/server.service.ts | 3 +++ server/controllers/api/config.ts | 10 ++++++++- shared/models/server-config.model.ts | 3 +++ 8 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 client/src/app/+admin/users/user-edit/user-edit.component.scss diff --git a/client/src/app/+admin/users/user-edit/user-add.component.ts b/client/src/app/+admin/users/user-edit/user-add.component.ts index 5dc069104..6d8151b42 100644 --- a/client/src/app/+admin/users/user-edit/user-add.component.ts +++ b/client/src/app/+admin/users/user-edit/user-add.component.ts @@ -11,12 +11,14 @@ import { USER_PASSWORD, USER_VIDEO_QUOTA } from '../../../shared' +import { ServerService } from '../../../core' import { UserCreate } from '../../../../../../shared' import { UserEdit } from './user-edit' @Component({ selector: 'my-user-add', - templateUrl: './user-edit.component.html' + templateUrl: './user-edit.component.html', + styleUrls: [ './user-edit.component.scss' ] }) export class UserAddComponent extends UserEdit implements OnInit { error: string @@ -36,6 +38,7 @@ export class UserAddComponent extends UserEdit implements OnInit { } constructor ( + protected serverService: ServerService, private formBuilder: FormBuilder, private router: Router, private notificationsService: NotificationsService, diff --git a/client/src/app/+admin/users/user-edit/user-edit.component.html b/client/src/app/+admin/users/user-edit/user-edit.component.html index 0e23cb731..6988071ce 100644 --- a/client/src/app/+admin/users/user-edit/user-edit.component.html +++ b/client/src/app/+admin/users/user-edit/user-edit.component.html @@ -47,6 +47,11 @@ {{ videoQuotaOption.label }} + +
+ Transcoding is enabled on server. The video quota only take in account original video.
+ In maximum, this user could use ~ {{ computeQuotaWithTranscoding() | bytes }}. +
diff --git a/client/src/app/+admin/users/user-edit/user-edit.component.scss b/client/src/app/+admin/users/user-edit/user-edit.component.scss new file mode 100644 index 000000000..401caa0c6 --- /dev/null +++ b/client/src/app/+admin/users/user-edit/user-edit.component.scss @@ -0,0 +1,4 @@ +.transcoding-information { + margin-top: 5px; + font-size: 11px; +} diff --git a/client/src/app/+admin/users/user-edit/user-edit.ts b/client/src/app/+admin/users/user-edit/user-edit.ts index 657c0f1c0..76497c9b6 100644 --- a/client/src/app/+admin/users/user-edit/user-edit.ts +++ b/client/src/app/+admin/users/user-edit/user-edit.ts @@ -1,17 +1,39 @@ +import { ServerService } from '../../../core' import { FormReactive } from '../../../shared' +import { VideoResolution } from '../../../../../../shared/models/videos/video-resolution.enum' export abstract class UserEdit extends FormReactive { videoQuotaOptions = [ { value: -1, label: 'Unlimited' }, { value: 0, label: '0'}, { value: 100 * 1024 * 1024, label: '100MB' }, - { value: 5 * 1024 * 1024, label: '500MB' }, + { value: 500 * 1024 * 1024, label: '500MB' }, { value: 1024 * 1024 * 1024, label: '1GB' }, { value: 5 * 1024 * 1024 * 1024, label: '5GB' }, { value: 20 * 1024 * 1024 * 1024, label: '20GB' }, { value: 50 * 1024 * 1024 * 1024, label: '50GB' } ] + protected abstract serverService: ServerService abstract isCreation (): boolean abstract getFormButtonTitle (): string + + isTranscodingInformationDisplayed () { + const formVideoQuota = parseInt(this.form.value['videoQuota'], 10) + + return this.serverService.getConfig().transcoding.enabledResolutions.length !== 0 && + formVideoQuota > 0 + } + + computeQuotaWithTranscoding () { + const resolutions = this.serverService.getConfig().transcoding.enabledResolutions + const higherResolution = VideoResolution.H_1080P + let multiplier = 0 + + for (const resolution of resolutions) { + multiplier += resolution / higherResolution + } + + return multiplier * parseInt(this.form.value['videoQuota'], 10) + } } diff --git a/client/src/app/+admin/users/user-edit/user-update.component.ts b/client/src/app/+admin/users/user-edit/user-update.component.ts index 0966981c0..bd901e655 100644 --- a/client/src/app/+admin/users/user-edit/user-update.component.ts +++ b/client/src/app/+admin/users/user-edit/user-update.component.ts @@ -7,13 +7,15 @@ import { NotificationsService } from 'angular2-notifications' import { UserService } from '../shared' import { USER_EMAIL, USER_VIDEO_QUOTA } from '../../../shared' +import { ServerService } from '../../../core' import { UserUpdate } from '../../../../../../shared/models/users/user-update.model' import { User } from '../../../shared/users/user.model' import { UserEdit } from './user-edit' @Component({ selector: 'my-user-update', - templateUrl: './user-edit.component.html' + templateUrl: './user-edit.component.html', + styleUrls: [ './user-edit.component.scss' ] }) export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy { error: string @@ -33,10 +35,11 @@ export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy { private paramsSub: Subscription constructor ( - private formBuilder: FormBuilder, + protected serverService: ServerService, private route: ActivatedRoute, private router: Router, private notificationsService: NotificationsService, + private formBuilder: FormBuilder, private userService: UserService ) { super() diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts index f24df5a89..ae507afce 100644 --- a/client/src/app/core/server/server.service.ts +++ b/client/src/app/core/server/server.service.ts @@ -11,6 +11,9 @@ export class ServerService { private config: ServerConfig = { signup: { allowed: false + }, + transcoding: { + enabledResolutions: [] } } private videoCategories: Array<{ id: number, label: string }> = [] diff --git a/server/controllers/api/config.ts b/server/controllers/api/config.ts index f02a2bc58..c9a051bdc 100644 --- a/server/controllers/api/config.ts +++ b/server/controllers/api/config.ts @@ -1,21 +1,29 @@ import * as express from 'express' import { isSignupAllowed } from '../../helpers' +import { CONFIG } from '../../initializers' import { ServerConfig } from '../../../shared' const configRouter = express.Router() configRouter.get('/', getConfig) -// Get the client credentials for the PeerTube front end function getConfig (req: express.Request, res: express.Response, next: express.NextFunction) { isSignupAllowed().then(allowed => { + const enabledResolutions = Object.keys(CONFIG.TRANSCODING.RESOLUTIONS) + .filter(key => CONFIG.TRANSCODING.RESOLUTIONS[key] === true) + .map(r => parseInt(r, 10)) + const json: ServerConfig = { signup: { allowed + }, + transcoding: { + enabledResolutions } } + res.json(json) }) } diff --git a/shared/models/server-config.model.ts b/shared/models/server-config.model.ts index aab842905..8de808e60 100644 --- a/shared/models/server-config.model.ts +++ b/shared/models/server-config.model.ts @@ -2,4 +2,7 @@ export interface ServerConfig { signup: { allowed: boolean } + transcoding: { + enabledResolutions: number[] + } } -- cgit v1.2.3