syncthing/src/app/services/folder.service.ts

65 lines
2.0 KiB
TypeScript
Raw Normal View History

2020-03-18 03:37:11 +01:00
import { Injectable } from '@angular/core';
import { SystemConfigService } from './system-config.service';
import { Observable, Subscriber } from 'rxjs';
2020-03-25 14:41:22 +01:00
import Folder from '../folder';
2020-03-18 03:37:11 +01:00
import { DbStatusService } from './db-status.service';
import { ProgressService } from './progress.service';
2020-03-18 03:37:11 +01:00
@Injectable({
providedIn: 'root'
})
export class FolderService {
private folders: Folder[];
2020-03-18 03:37:11 +01:00
constructor(
private systemConfigService: SystemConfigService,
private dbStatusService: DbStatusService,
private progressService: ProgressService,
2020-03-18 03:37:11 +01:00
) { }
getFolderStatusInOrder(observer: Subscriber<Folder>, startIndex: number) {
// Return if there aren't any folders at the index
2020-03-24 21:45:54 +01:00
if (startIndex >= (this.folders.length)) {
2020-03-24 18:17:32 +01:00
observer.complete();
return;
}
const folder: Folder = this.folders[startIndex];
startIndex = startIndex + 1;
this.dbStatusService.getFolderStatus(folder.id).subscribe(
status => {
folder.status = status;
folder.stateType = Folder.getStateType(folder);
folder.state = Folder.stateTypeToString(folder.stateType);
observer.next(folder);
// Add one to the progress service
this.progressService.addToProgress(1);
// recursively get the status of the next folder
this.getFolderStatusInOrder(observer, startIndex);
}
);
}
2020-03-18 03:37:11 +01:00
/**
* getAll() finds all folders and uses db status service to
* set all their statuses
*/
getAll(): Observable<Folder> {
// TODO return this.folders if cached
2020-03-18 03:37:11 +01:00
const folderObservable: Observable<Folder> = new Observable((observer) => {
this.systemConfigService.getFolders().subscribe(
folders => {
this.folders = folders;
// Synchronously get the status of each folder
this.getFolderStatusInOrder(observer, 0);
2020-03-18 03:37:11 +01:00
},
2020-03-24 18:17:32 +01:00
err => { console.log("getAll error!", err) },
() => { console.log("get all complete!") }
);
2020-03-18 03:37:11 +01:00
});
return folderObservable
}
}