mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-23 11:28:59 +00:00
update SystemConfigService to load config and set folders and devices
update getFolders and getDevices to send respective array as soon as it has data
This commit is contained in:
parent
cf3de8cf35
commit
af3d380b6a
@ -5,6 +5,7 @@ import { MatSort } from '@angular/material/sort';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { Observable, of as observableOf, merge } from 'rxjs';
|
||||
import { Device } from '../device';
|
||||
import { SystemConfigService } from '../system-config.service';
|
||||
|
||||
/**
|
||||
* Data source for the DeviceList view. This class should
|
||||
@ -16,7 +17,7 @@ export class DeviceListDataSource extends DataSource<Device> {
|
||||
paginator: MatPaginator;
|
||||
sort: MatSort;
|
||||
|
||||
constructor() {
|
||||
constructor(private systemConfigService: SystemConfigService) {
|
||||
super();
|
||||
}
|
||||
|
||||
@ -29,7 +30,7 @@ export class DeviceListDataSource extends DataSource<Device> {
|
||||
// Combine everything that affects the rendered data into one update
|
||||
// st
|
||||
const dataMutations = [
|
||||
observableOf(this.data),
|
||||
this.systemConfigService.getDevices(),
|
||||
this.paginator.page,
|
||||
this.sort.sortChange
|
||||
];
|
||||
|
@ -6,6 +6,7 @@ import { MatTable } from '@angular/material/table';
|
||||
import { DeviceListDataSource } from './device-list-datasource';
|
||||
import { Device } from '../device';
|
||||
import { SystemConfigService } from '../system-config.service';
|
||||
import { flatMap } from 'rxjs/operators';
|
||||
|
||||
|
||||
@Component({
|
||||
@ -25,17 +26,19 @@ export class DeviceListComponent implements AfterViewInit, OnInit {
|
||||
constructor(private systemConfigService: SystemConfigService) { };
|
||||
|
||||
ngOnInit() {
|
||||
this.dataSource = new DeviceListDataSource();
|
||||
this.systemConfigService.getDevices().subscribe(
|
||||
data => {
|
||||
this.dataSource.data = data;
|
||||
}
|
||||
);
|
||||
this.dataSource = new DeviceListDataSource(this.systemConfigService);
|
||||
this.dataSource.data = [];
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
this.dataSource.sort = this.sort;
|
||||
this.dataSource.paginator = this.paginator;
|
||||
this.table.dataSource = this.dataSource;
|
||||
|
||||
this.systemConfigService.getDevices().subscribe(
|
||||
data => {
|
||||
this.dataSource.data = data;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@ import { MatSort } from '@angular/material/sort';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { Observable, of as observableOf, merge } from 'rxjs';
|
||||
import { Folder } from '../folder';
|
||||
import { SystemConfigService } from '../system-config.service';
|
||||
|
||||
/**
|
||||
* Data source for the FolderList view. This class should
|
||||
@ -16,7 +17,7 @@ export class FolderListDataSource extends DataSource<Folder> {
|
||||
paginator: MatPaginator;
|
||||
sort: MatSort;
|
||||
|
||||
constructor() {
|
||||
constructor(private systemConfigService: SystemConfigService) {
|
||||
super();
|
||||
}
|
||||
|
||||
@ -29,7 +30,8 @@ export class FolderListDataSource extends DataSource<Folder> {
|
||||
// Combine everything that affects the rendered data into one update
|
||||
// st
|
||||
const dataMutations = [
|
||||
observableOf(this.data),
|
||||
// observableOf(this.data),
|
||||
this.systemConfigService.getFolders(),
|
||||
this.paginator.page,
|
||||
this.sort.sortChange
|
||||
];
|
||||
|
@ -25,17 +25,22 @@ export class FolderListComponent implements AfterViewInit, OnInit {
|
||||
constructor(private systemConfigService: SystemConfigService) { };
|
||||
|
||||
ngOnInit() {
|
||||
this.dataSource = new FolderListDataSource();
|
||||
this.systemConfigService.getFolders().subscribe(
|
||||
data => {
|
||||
this.dataSource.data = data;
|
||||
}
|
||||
);
|
||||
this.dataSource = new FolderListDataSource(this.systemConfigService);
|
||||
this.dataSource.data = [];
|
||||
}
|
||||
|
||||
ngAfterContentInit() {
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
this.dataSource.sort = this.sort;
|
||||
this.dataSource.paginator = this.paginator;
|
||||
this.table.dataSource = this.dataSource;
|
||||
|
||||
this.systemConfigService.getFolders().subscribe(
|
||||
data => {
|
||||
this.dataSource.data = data;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { Observable, Subject, of } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
import { Folder } from './folder';
|
||||
import { Device } from './device';
|
||||
@ -10,15 +12,85 @@ import { FOLDERS, DEVICES } from './mock-config-data';
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class SystemConfigService {
|
||||
private systemConfig: any;
|
||||
private folders: Folder[];
|
||||
private devices: Device[];
|
||||
private foldersSubject: Subject<Folder[]> = new Subject();
|
||||
private devicesSubject: Subject<Device[]> = new Subject();
|
||||
|
||||
constructor() { }
|
||||
private systemConfigUrl = 'http://127.0.0.1:8384/rest/system/config'; // URL to web api
|
||||
httpOptions = {
|
||||
// TODO find best way to get api key
|
||||
// headers: new HttpHeaders({ 'X-API-Key': 'x' })
|
||||
};
|
||||
|
||||
constructor(private http: HttpClient) { }
|
||||
|
||||
ngOnInit(): void { }
|
||||
|
||||
|
||||
getSystemConfig(): Observable<any> {
|
||||
return this.http
|
||||
.get(this.systemConfigUrl, this.httpOptions)
|
||||
.pipe(map(res => {
|
||||
this.systemConfig = res;
|
||||
|
||||
this.folders = res['folders'];
|
||||
this.devices = res['devices'];
|
||||
this.foldersSubject.next(this.folders);
|
||||
this.devicesSubject.next(this.devices);
|
||||
|
||||
return res;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
getFolders(): Observable<Folder[]> {
|
||||
return of(FOLDERS);
|
||||
const folderObservable: Observable<Folder[]> = new Observable((observer) => {
|
||||
if (this.folders) {
|
||||
observer.next(this.folders);
|
||||
} else {
|
||||
// create timer to keep checking for folders
|
||||
let checkFolders = (): Boolean => {
|
||||
if (this.folders) {
|
||||
observer.next(this.folders);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
let t = setInterval(() => {
|
||||
if (checkFolders())
|
||||
clearInterval(t);
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
return folderObservable;
|
||||
}
|
||||
|
||||
getDevices(): Observable<Device[]> {
|
||||
return of(DEVICES);
|
||||
const deviceObserverable: Observable<Device[]> = new Observable((observer) => {
|
||||
if (this.folders) {
|
||||
observer.next(this.devices);
|
||||
} else {
|
||||
// create timer to keep checking for devices
|
||||
let checkFolders = (): Boolean => {
|
||||
if (this.devices) {
|
||||
observer.next(this.devices);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
let t = setInterval(() => {
|
||||
if (checkFolders())
|
||||
clearInterval(t);
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
return deviceObserverable;
|
||||
// return from(this.devices);
|
||||
if (this.devices) {
|
||||
this.devicesSubject.next(this.devices);
|
||||
}
|
||||
return this.devicesSubject;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user