1
0
Fork 0

Take in account transcoding for video quota

This commit is contained in:
Chocobozzz 2017-10-19 17:33:32 +02:00
parent a10d56bafc
commit 6a84aafd23
No known key found for this signature in database
GPG key ID: 583A612D890159BE
8 changed files with 56 additions and 5 deletions

View file

@ -11,12 +11,14 @@ import {
USER_PASSWORD, USER_PASSWORD,
USER_VIDEO_QUOTA USER_VIDEO_QUOTA
} from '../../../shared' } from '../../../shared'
import { ServerService } from '../../../core'
import { UserCreate } from '../../../../../../shared' import { UserCreate } from '../../../../../../shared'
import { UserEdit } from './user-edit' import { UserEdit } from './user-edit'
@Component({ @Component({
selector: 'my-user-add', 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 { export class UserAddComponent extends UserEdit implements OnInit {
error: string error: string
@ -36,6 +38,7 @@ export class UserAddComponent extends UserEdit implements OnInit {
} }
constructor ( constructor (
protected serverService: ServerService,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private router: Router, private router: Router,
private notificationsService: NotificationsService, private notificationsService: NotificationsService,

View file

@ -47,6 +47,11 @@
{{ videoQuotaOption.label }} {{ videoQuotaOption.label }}
</option> </option>
</select> </select>
<div class="transcoding-information" *ngIf="isTranscodingInformationDisplayed()">
Transcoding is enabled on server. The video quota only take in account <strong>original</strong> video. <br />
In maximum, this user could use ~ {{ computeQuotaWithTranscoding() | bytes }}.
</div>
</div> </div>
<input type="submit" value="{{ getFormButtonTitle() }}" class="btn btn-default" [disabled]="!form.valid"> <input type="submit" value="{{ getFormButtonTitle() }}" class="btn btn-default" [disabled]="!form.valid">

View file

@ -0,0 +1,4 @@
.transcoding-information {
margin-top: 5px;
font-size: 11px;
}

View file

@ -1,17 +1,39 @@
import { ServerService } from '../../../core'
import { FormReactive } from '../../../shared' import { FormReactive } from '../../../shared'
import { VideoResolution } from '../../../../../../shared/models/videos/video-resolution.enum'
export abstract class UserEdit extends FormReactive { export abstract class UserEdit extends FormReactive {
videoQuotaOptions = [ videoQuotaOptions = [
{ value: -1, label: 'Unlimited' }, { value: -1, label: 'Unlimited' },
{ value: 0, label: '0'}, { value: 0, label: '0'},
{ value: 100 * 1024 * 1024, label: '100MB' }, { 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: 1024 * 1024 * 1024, label: '1GB' },
{ value: 5 * 1024 * 1024 * 1024, label: '5GB' }, { value: 5 * 1024 * 1024 * 1024, label: '5GB' },
{ value: 20 * 1024 * 1024 * 1024, label: '20GB' }, { value: 20 * 1024 * 1024 * 1024, label: '20GB' },
{ value: 50 * 1024 * 1024 * 1024, label: '50GB' } { value: 50 * 1024 * 1024 * 1024, label: '50GB' }
] ]
protected abstract serverService: ServerService
abstract isCreation (): boolean abstract isCreation (): boolean
abstract getFormButtonTitle (): string 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)
}
} }

View file

@ -7,13 +7,15 @@ import { NotificationsService } from 'angular2-notifications'
import { UserService } from '../shared' import { UserService } from '../shared'
import { USER_EMAIL, USER_VIDEO_QUOTA } from '../../../shared' import { USER_EMAIL, USER_VIDEO_QUOTA } from '../../../shared'
import { ServerService } from '../../../core'
import { UserUpdate } from '../../../../../../shared/models/users/user-update.model' import { UserUpdate } from '../../../../../../shared/models/users/user-update.model'
import { User } from '../../../shared/users/user.model' import { User } from '../../../shared/users/user.model'
import { UserEdit } from './user-edit' import { UserEdit } from './user-edit'
@Component({ @Component({
selector: 'my-user-update', 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 { export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy {
error: string error: string
@ -33,10 +35,11 @@ export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy {
private paramsSub: Subscription private paramsSub: Subscription
constructor ( constructor (
private formBuilder: FormBuilder, protected serverService: ServerService,
private route: ActivatedRoute, private route: ActivatedRoute,
private router: Router, private router: Router,
private notificationsService: NotificationsService, private notificationsService: NotificationsService,
private formBuilder: FormBuilder,
private userService: UserService private userService: UserService
) { ) {
super() super()

View file

@ -11,6 +11,9 @@ export class ServerService {
private config: ServerConfig = { private config: ServerConfig = {
signup: { signup: {
allowed: false allowed: false
},
transcoding: {
enabledResolutions: []
} }
} }
private videoCategories: Array<{ id: number, label: string }> = [] private videoCategories: Array<{ id: number, label: string }> = []

View file

@ -1,21 +1,29 @@
import * as express from 'express' import * as express from 'express'
import { isSignupAllowed } from '../../helpers' import { isSignupAllowed } from '../../helpers'
import { CONFIG } from '../../initializers'
import { ServerConfig } from '../../../shared' import { ServerConfig } from '../../../shared'
const configRouter = express.Router() const configRouter = express.Router()
configRouter.get('/', getConfig) configRouter.get('/', getConfig)
// Get the client credentials for the PeerTube front end
function getConfig (req: express.Request, res: express.Response, next: express.NextFunction) { function getConfig (req: express.Request, res: express.Response, next: express.NextFunction) {
isSignupAllowed().then(allowed => { 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 = { const json: ServerConfig = {
signup: { signup: {
allowed allowed
},
transcoding: {
enabledResolutions
} }
} }
res.json(json) res.json(json)
}) })
} }

View file

@ -2,4 +2,7 @@ export interface ServerConfig {
signup: { signup: {
allowed: boolean allowed: boolean
} }
transcoding: {
enabledResolutions: number[]
}
} }