1 import { Injectable } from '@angular/core';
3 import * as _ from 'lodash';
5 import { ExecutingTask } from '../models/executing-task';
6 import { FinishedTask } from '../models/finished-task';
7 import { Task } from '../models/task';
8 import { SummaryService } from './summary.service';
10 class TaskSubscription {
13 onTaskFinished: (finishedTask: FinishedTask) => any;
15 constructor(name: string, metadata: object, onTaskFinished: any) {
17 this.metadata = metadata;
18 this.onTaskFinished = onTaskFinished;
25 export class TaskManagerService {
26 subscriptions: Array<TaskSubscription> = [];
28 constructor(summaryService: SummaryService) {
29 summaryService.subscribe((data: any) => {
33 const executingTasks = data.executing_tasks;
34 const finishedTasks = data.finished_tasks;
35 const newSubscriptions: Array<TaskSubscription> = [];
36 for (const subscription of this.subscriptions) {
37 const finishedTask = <FinishedTask>this._getTask(subscription, finishedTasks);
38 const executingTask = <ExecutingTask>this._getTask(subscription, executingTasks);
39 if (finishedTask !== null && executingTask === null) {
40 subscription.onTaskFinished(finishedTask);
42 if (executingTask !== null) {
43 newSubscriptions.push(subscription);
45 this.subscriptions = newSubscriptions;
50 subscribe(name: string, metadata: object, onTaskFinished: (finishedTask: FinishedTask) => any) {
51 this.subscriptions.push(new TaskSubscription(name, metadata, onTaskFinished));
54 _getTask(subscription: TaskSubscription, tasks: Array<Task>): Task {
55 for (const task of tasks) {
56 if (task.name === subscription.name && _.isEqual(task.metadata, subscription.metadata)) {