1 import { Injectable } from '@angular/core';
3 import { Observable, Subscriber } from 'rxjs';
5 import { NotificationType } from '../enum/notification-type.enum';
6 import { CdNotificationConfig } from '../models/cd-notification';
7 import { ExecutingTask } from '../models/executing-task';
8 import { FinishedTask } from '../models/finished-task';
9 import { NotificationService } from './notification.service';
10 import { SummaryService } from './summary.service';
11 import { TaskManagerService } from './task-manager.service';
12 import { TaskMessageService } from './task-message.service';
17 export class TaskWrapperService {
19 private notificationService: NotificationService,
20 private summaryService: SummaryService,
21 private taskMessageService: TaskMessageService,
22 private taskManagerService: TaskManagerService
25 wrapTaskAroundCall({ task, call }: { task: FinishedTask; call: Observable<any> }) {
26 return new Observable((observer: Subscriber<any>) => {
29 if (resp.status === 202) {
30 this._handleExecutingTasks(task);
32 this.summaryService.refresh();
34 this.notificationService.notifyTask(task);
39 task.exception = resp.error;
49 _handleExecutingTasks(task: FinishedTask) {
50 const notification = new CdNotificationConfig(
51 NotificationType.info,
52 this.taskMessageService.getRunningTitle(task)
54 notification.isFinishedTask = true;
55 this.notificationService.show(notification);
57 const executingTask = new ExecutingTask(task.name, task.metadata);
58 this.summaryService.addRunningTask(executingTask);
60 this.taskManagerService.subscribe(
62 executingTask.metadata,
63 (asyncTask: FinishedTask) => {
64 this.notificationService.notifyTask(asyncTask);