2020-03-18 03:37:11 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { SystemConfigService } from './system-config.service';
|
2020-03-19 00:39:25 +01:00
|
|
|
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';
|
2020-04-05 17:47:25 +02:00
|
|
|
import { ProgressService } from './progress.service';
|
2020-03-18 03:37:11 +01:00
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
|
|
|
export class FolderService {
|
2020-03-19 00:39:25 +01:00
|
|
|
private folders: Folder[];
|
2020-03-18 03:37:11 +01:00
|
|
|
|
|
|
|
constructor(
|
|
|
|
private systemConfigService: SystemConfigService,
|
2020-04-05 17:47:25 +02:00
|
|
|
private dbStatusService: DbStatusService,
|
|
|
|
private progressService: ProgressService,
|
2020-03-18 03:37:11 +01:00
|
|
|
) { }
|
|
|
|
|
2020-03-19 00:39:25 +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;
|
2020-03-19 00:39:25 +01:00
|
|
|
}
|
|
|
|
const folder: Folder = this.folders[startIndex];
|
|
|
|
startIndex = startIndex + 1;
|
|
|
|
this.dbStatusService.getFolderStatus(folder.id).subscribe(
|
|
|
|
status => {
|
2020-03-21 00:44:21 +01:00
|
|
|
folder.status = status;
|
2020-04-01 01:24:36 +02:00
|
|
|
folder.stateType = Folder.getStateType(folder);
|
|
|
|
folder.state = Folder.stateTypeToString(folder.stateType);
|
2020-03-19 00:39:25 +01:00
|
|
|
observer.next(folder);
|
|
|
|
|
2020-04-05 17:47:25 +02:00
|
|
|
// Add one to the progress service
|
|
|
|
this.progressService.addToProgress(1);
|
|
|
|
|
2020-03-19 00:39:25 +01:00
|
|
|
// 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> {
|
2020-03-26 23:23:53 +01:00
|
|
|
// TODO return this.folders if cached
|
|
|
|
|
2020-03-18 03:37:11 +01:00
|
|
|
const folderObservable: Observable<Folder> = new Observable((observer) => {
|
2020-03-20 00:01:45 +01:00
|
|
|
this.systemConfigService.getFolders().subscribe(
|
|
|
|
folders => {
|
|
|
|
this.folders = folders;
|
2020-03-19 00:39:25 +01:00
|
|
|
|
|
|
|
// Synchronously get the status of each folder
|
2020-03-20 00:01:45 +01:00
|
|
|
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-20 00:01:45 +01:00
|
|
|
);
|
2020-03-18 03:37:11 +01:00
|
|
|
});
|
|
|
|
return folderObservable
|
|
|
|
}
|
2020-03-21 00:44:21 +01:00
|
|
|
}
|