1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/frontend/app/ui/settings/scheduled-tasks.service.ts

68 lines
1.7 KiB
TypeScript
Raw Normal View History

2019-07-28 04:56:12 +08:00
import {Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs';
import {TaskProgressDTO} from '../../../../common/entities/settings/TaskProgressDTO';
import {NetworkService} from '../../model/network/network.service';
@Injectable()
export class ScheduledTasksService {
public progress: BehaviorSubject<{ [key: string]: TaskProgressDTO }>;
timer: number = null;
private subscribers = 0;
constructor(private _networkService: NetworkService) {
this.progress = new BehaviorSubject({});
}
subscribeToProgress(): void {
this.incSubscribers();
}
unsubscribeFromProgress(): void {
this.decSubscribers();
}
public forceUpdate() {
return this.getProgress();
}
public async start(id: string, config?: any) {
return await this._networkService.postJson('/admin/tasks/scheduled/' + id + '/start', {config: config});
}
public async stop(id: string) {
return await this._networkService.postJson('/admin/tasks/scheduled/' + id + '/stop');
}
protected async getProgress() {
return this.progress.next(await this._networkService.getJson<{ [key: string]: TaskProgressDTO }>('/admin/tasks/scheduled/progress'));
}
protected getProgressPeriodically() {
if (this.timer != null || this.subscribers === 0) {
return;
}
2019-08-20 18:54:45 +08:00
let repeatTime = 5000;
if (Object.values(this.progress.value).length === 0) {
repeatTime = 10000;
}
2019-07-28 04:56:12 +08:00
this.timer = window.setTimeout(async () => {
await this.getProgress();
this.timer = null;
this.getProgressPeriodically();
2019-08-20 18:54:45 +08:00
}, repeatTime);
2019-07-28 04:56:12 +08:00
}
private incSubscribers() {
this.subscribers++;
this.getProgressPeriodically();
}
private decSubscribers() {
this.subscribers--;
}
}