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-04-08 16:07:13 +02:00
|
|
|
import { map } from 'rxjs/operators';
|
2020-03-11 03:51:50 +01:00
|
|
|
|
2020-03-25 14:41:22 +01:00
|
|
|
import Folder from '../folder';
|
2020-03-25 21:08:07 +01:00
|
|
|
import Device from '../device';
|
2020-03-25 14:41:22 +01:00
|
|
|
import { environment } from '../../environments/environment'
|
2020-04-08 16:07:13 +02:00
|
|
|
import { apiURL } from '../api-utils'
|
2020-04-05 17:47:25 +02:00
|
|
|
import { ProgressService } from './progress.service';
|
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-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-04-05 17:47:25 +02:00
|
|
|
constructor(
|
|
|
|
private http: HttpClient,
|
|
|
|
private progressService: ProgressService,
|
|
|
|
) { }
|
2020-03-14 03:09:48 +01:00
|
|
|
|
|
|
|
getSystemConfig(): Observable<any> {
|
|
|
|
return this.http
|
2020-03-21 00:44:21 +01:00
|
|
|
.get(this.systemConfigUrl)
|
2020-03-18 03:36:42 +01:00
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
this.folders = res['folders'];
|
|
|
|
this.devices = res['devices'];
|
2020-04-05 17:47:25 +02:00
|
|
|
|
|
|
|
// Set the total for the progress service
|
|
|
|
this.progressService.total = this.folders.length + this.devices.length;
|
|
|
|
|
2020-03-18 03:36:42 +01:00
|
|
|
this.foldersSubject.next(this.folders);
|
|
|
|
this.devicesSubject.next(this.devices);
|
2020-03-14 03:09:48 +01:00
|
|
|
|
2020-03-18 03:36:42 +01:00
|
|
|
return res;
|
|
|
|
})
|
2020-03-14 03:09:48 +01:00
|
|
|
);
|
|
|
|
}
|
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);
|
2020-03-24 18:17:32 +01:00
|
|
|
observer.complete();
|
2020-03-14 03:09:48 +01:00
|
|
|
} 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-24 18:17:32 +01:00
|
|
|
observer.next(this.folders)
|
|
|
|
observer.complete();
|
2020-03-16 16:11:51 +01:00
|
|
|
}
|
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) => {
|
2020-03-26 21:17:03 +01:00
|
|
|
if (this.devices) {
|
2020-03-14 03:09:48 +01:00
|
|
|
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
|
|
|
}
|