2020-03-11 03:51:50 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
2020-03-14 03:09:48 +01:00
|
|
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
2020-03-11 03:51:50 +01:00
|
|
|
|
2020-03-17 14:46:32 +01:00
|
|
|
import { Observable, Subject } from 'rxjs';
|
2020-03-14 03:09:48 +01:00
|
|
|
import { map } from 'rxjs/operators';
|
2020-03-11 03:51:50 +01:00
|
|
|
|
|
|
|
import { Folder } from './folder';
|
2020-03-11 16:01:11 +01:00
|
|
|
import { Device } from './device';
|
2020-03-15 01:07:08 +01:00
|
|
|
import { CookieService } from './cookie.service';
|
2020-03-15 17:33:21 +01:00
|
|
|
import { environment } from '../environments/environment'
|
2020-03-15 01:07:08 +01:00
|
|
|
import { apiURL } from './api-utils'
|
2020-03-11 03:51:50 +01:00
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
|
|
|
export class SystemConfigService {
|
2020-03-14 03:09:48 +01:00
|
|
|
private folders: Folder[];
|
|
|
|
private devices: Device[];
|
|
|
|
private foldersSubject: Subject<Folder[]> = new Subject();
|
|
|
|
private devicesSubject: Subject<Device[]> = new Subject();
|
2020-03-11 03:51:50 +01:00
|
|
|
|
2020-03-15 22:00:56 +01:00
|
|
|
private systemConfigUrl = environment.production ? apiURL + 'rest/system/config' : 'api/config';
|
2020-03-17 14:46:32 +01:00
|
|
|
private httpOptions: any;
|
2020-03-14 03:09:48 +01:00
|
|
|
|
2020-03-16 16:11:51 +01:00
|
|
|
private checkInterval: number = 100;
|
2020-03-15 22:00:56 +01:00
|
|
|
|
2020-03-15 17:42:55 +01:00
|
|
|
constructor(private http: HttpClient, private cookieService: CookieService) {
|
2020-03-15 22:01:19 +01:00
|
|
|
this.httpOptions = { headers: new HttpHeaders(this.cookieService.getCSRFHeader()) };
|
2020-03-15 17:33:21 +01:00
|
|
|
}
|
2020-03-14 03:09:48 +01:00
|
|
|
|
|
|
|
getSystemConfig(): Observable<any> {
|
|
|
|
return this.http
|
|
|
|
.get(this.systemConfigUrl, this.httpOptions)
|
|
|
|
.pipe(map(res => {
|
|
|
|
this.folders = res['folders'];
|
|
|
|
this.devices = res['devices'];
|
|
|
|
this.foldersSubject.next(this.folders);
|
|
|
|
this.devicesSubject.next(this.devices);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
2020-03-11 03:51:50 +01:00
|
|
|
|
|
|
|
getFolders(): Observable<Folder[]> {
|
2020-03-14 03:09:48 +01:00
|
|
|
const folderObservable: Observable<Folder[]> = new Observable((observer) => {
|
|
|
|
if (this.folders) {
|
|
|
|
observer.next(this.folders);
|
|
|
|
} else {
|
|
|
|
// create timer to keep checking for folders
|
|
|
|
let t = setInterval(() => {
|
2020-03-16 16:11:51 +01:00
|
|
|
if (this.folders) {
|
2020-03-14 03:09:48 +01:00
|
|
|
clearInterval(t);
|
2020-03-16 16:11:51 +01:00
|
|
|
observer.next(this.folders);
|
|
|
|
}
|
2020-03-15 22:01:19 +01:00
|
|
|
}, this.checkInterval);
|
2020-03-14 03:09:48 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
return folderObservable;
|
2020-03-11 03:51:50 +01:00
|
|
|
}
|
2020-03-11 16:01:11 +01:00
|
|
|
|
|
|
|
getDevices(): Observable<Device[]> {
|
2020-03-14 03:09:48 +01:00
|
|
|
const deviceObserverable: Observable<Device[]> = new Observable((observer) => {
|
|
|
|
if (this.folders) {
|
|
|
|
observer.next(this.devices);
|
|
|
|
} else {
|
|
|
|
let t = setInterval(() => {
|
2020-03-16 16:11:51 +01:00
|
|
|
if (this.devices) {
|
2020-03-14 03:09:48 +01:00
|
|
|
clearInterval(t);
|
2020-03-16 03:07:11 +01:00
|
|
|
observer.next(this.devices);
|
|
|
|
}
|
2020-03-15 22:01:19 +01:00
|
|
|
}, this.checkInterval);
|
2020-03-14 03:09:48 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
return deviceObserverable;
|
2020-03-11 16:01:11 +01:00
|
|
|
}
|
2020-03-14 03:09:48 +01:00
|
|
|
}
|