Take in account transcoding for video quota
This commit is contained in:
parent
a10d56bafc
commit
6a84aafd23
8 changed files with 56 additions and 5 deletions
|
@ -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,
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
.transcoding-information {
|
||||
margin-top: 5px;
|
||||
font-size: 11px;
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -11,6 +11,9 @@ export class ServerService {
|
|||
private config: ServerConfig = {
|
||||
signup: {
|
||||
allowed: false
|
||||
},
|
||||
transcoding: {
|
||||
enabledResolutions: []
|
||||
}
|
||||
}
|
||||
private videoCategories: Array<{ id: number, label: string }> = []
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -2,4 +2,7 @@ export interface ServerConfig {
|
|||
signup: {
|
||||
allowed: boolean
|
||||
}
|
||||
transcoding: {
|
||||
enabledResolutions: number[]
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue