2017-10-09 19:12:40 +02:00
|
|
|
import { HttpClient } from '@angular/common/http'
|
2017-12-07 17:22:44 +01:00
|
|
|
import { Injectable } from '@angular/core'
|
|
|
|
import 'rxjs/add/operator/do'
|
|
|
|
import { ReplaySubject } from 'rxjs/ReplaySubject'
|
2017-10-09 19:12:40 +02:00
|
|
|
import { ServerConfig } from '../../../../../shared'
|
2017-12-11 17:36:46 +01:00
|
|
|
import { environment } from '../../../environments/environment'
|
2017-10-09 19:12:40 +02:00
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
export class ServerService {
|
2017-12-11 17:36:46 +01:00
|
|
|
private static BASE_CONFIG_URL = environment.apiUrl + '/api/v1/config/'
|
|
|
|
private static BASE_VIDEO_URL = environment.apiUrl + '/api/v1/videos/'
|
2017-10-09 19:12:40 +02:00
|
|
|
|
2017-12-07 17:22:44 +01:00
|
|
|
videoPrivaciesLoaded = new ReplaySubject<boolean>(1)
|
|
|
|
videoCategoriesLoaded = new ReplaySubject<boolean>(1)
|
|
|
|
videoLicencesLoaded = new ReplaySubject<boolean>(1)
|
|
|
|
videoLanguagesLoaded = new ReplaySubject<boolean>(1)
|
|
|
|
|
2017-10-09 19:12:40 +02:00
|
|
|
private config: ServerConfig = {
|
|
|
|
signup: {
|
|
|
|
allowed: false
|
2017-10-19 17:33:32 +02:00
|
|
|
},
|
|
|
|
transcoding: {
|
|
|
|
enabledResolutions: []
|
2017-10-09 19:12:40 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
private videoCategories: Array<{ id: number, label: string }> = []
|
|
|
|
private videoLicences: Array<{ id: number, label: string }> = []
|
|
|
|
private videoLanguages: Array<{ id: number, label: string }> = []
|
2017-10-31 11:52:52 +01:00
|
|
|
private videoPrivacies: Array<{ id: number, label: string }> = []
|
2017-10-09 19:12:40 +02:00
|
|
|
|
|
|
|
constructor (private http: HttpClient) {}
|
|
|
|
|
|
|
|
loadConfig () {
|
|
|
|
this.http.get<ServerConfig>(ServerService.BASE_CONFIG_URL)
|
|
|
|
.subscribe(data => this.config = data)
|
|
|
|
}
|
|
|
|
|
|
|
|
loadVideoCategories () {
|
2017-12-07 17:22:44 +01:00
|
|
|
return this.loadVideoAttributeEnum('categories', this.videoCategories, this.videoCategoriesLoaded)
|
2017-10-09 19:12:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
loadVideoLicences () {
|
2017-12-07 17:22:44 +01:00
|
|
|
return this.loadVideoAttributeEnum('licences', this.videoLicences, this.videoLicencesLoaded)
|
2017-10-09 19:12:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
loadVideoLanguages () {
|
2017-12-07 17:22:44 +01:00
|
|
|
return this.loadVideoAttributeEnum('languages', this.videoLanguages, this.videoLanguagesLoaded)
|
2017-10-09 19:12:40 +02:00
|
|
|
}
|
|
|
|
|
2017-10-31 11:52:52 +01:00
|
|
|
loadVideoPrivacies () {
|
2017-12-07 17:22:44 +01:00
|
|
|
return this.loadVideoAttributeEnum('privacies', this.videoPrivacies, this.videoPrivaciesLoaded)
|
2017-10-31 11:52:52 +01:00
|
|
|
}
|
|
|
|
|
2017-10-09 19:12:40 +02:00
|
|
|
getConfig () {
|
|
|
|
return this.config
|
|
|
|
}
|
|
|
|
|
|
|
|
getVideoCategories () {
|
|
|
|
return this.videoCategories
|
|
|
|
}
|
|
|
|
|
|
|
|
getVideoLicences () {
|
|
|
|
return this.videoLicences
|
|
|
|
}
|
|
|
|
|
|
|
|
getVideoLanguages () {
|
|
|
|
return this.videoLanguages
|
|
|
|
}
|
|
|
|
|
2017-10-31 11:52:52 +01:00
|
|
|
getVideoPrivacies () {
|
|
|
|
return this.videoPrivacies
|
|
|
|
}
|
|
|
|
|
|
|
|
private loadVideoAttributeEnum (
|
|
|
|
attributeName: 'categories' | 'licences' | 'languages' | 'privacies',
|
2017-12-07 17:22:44 +01:00
|
|
|
hashToPopulate: { id: number, label: string }[],
|
|
|
|
notifier: ReplaySubject<boolean>
|
2017-10-31 11:52:52 +01:00
|
|
|
) {
|
2017-10-09 19:12:40 +02:00
|
|
|
return this.http.get(ServerService.BASE_VIDEO_URL + attributeName)
|
2017-12-07 17:22:44 +01:00
|
|
|
.subscribe(data => {
|
|
|
|
Object.keys(data)
|
|
|
|
.forEach(dataKey => {
|
|
|
|
hashToPopulate.push({
|
|
|
|
id: parseInt(dataKey, 10),
|
|
|
|
label: data[dataKey]
|
|
|
|
})
|
2017-10-09 19:12:40 +02:00
|
|
|
})
|
2017-12-08 08:39:15 +01:00
|
|
|
|
|
|
|
notifier.next(true)
|
2017-12-07 17:22:44 +01:00
|
|
|
})
|
2017-10-09 19:12:40 +02:00
|
|
|
}
|
|
|
|
}
|