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_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,

View file

@ -47,6 +47,11 @@
{{ videoQuotaOption.label }}
</option>
</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>
<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 { 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)
}
}

View file

@ -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()

View file

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

View file

@ -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)
})
}

View file

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