Skip to content

Commit

Permalink
Add 'Terminate Task' command
Browse files Browse the repository at this point in the history
Fixes #5159

Added a new command `Terminate Task` which prompts users to select
a running task if available in order to terminate it.

Signed-off-by: Vincent Fugnitto <vincent.fugnitto@ericsson.com>
  • Loading branch information
vince-fugnitto committed May 15, 2019
1 parent 87d8755 commit 84c4764
Showing 1 changed file with 45 additions and 1 deletion.
46 changes: 45 additions & 1 deletion packages/task/src/browser/task-frontend-contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ import { TaskContribution, TaskResolverRegistry, TaskProviderRegistry } from './
import { TaskService } from './task-service';
import { TerminalMenus } from '@theia/terminal/lib/browser/terminal-frontend-contribution';
import { TaskSchemaUpdater } from './task-schema-updater';
import { TaskConfiguration } from '../common';
import { TaskConfiguration, TaskInfo } from '../common';
import { QuickPickItem, QuickPickService } from '@theia/core/lib/common/quick-pick-service';

export namespace TaskCommands {
const TASK_CATEGORY = 'Task';
Expand Down Expand Up @@ -66,6 +67,12 @@ export namespace TaskCommands {
category: TASK_CATEGORY,
label: 'Clear History'
};

export const TASK_TERMINATE: Command = {
id: 'task.terminate',
category: TASK_CATEGORY,
label: 'Terminate Task'
};
}

const TASKS_STORAGE_KEY = 'tasks';
Expand Down Expand Up @@ -102,6 +109,9 @@ export class TaskFrontendContribution implements CommandContribution, MenuContri
@inject(StorageService)
protected readonly storageService: StorageService;

@inject(QuickPickService)
protected readonly quickPickService: QuickPickService;

onStart(): void {
this.contributionProvider.getContributions().forEach(contrib => {
if (contrib.registerResolvers) {
Expand Down Expand Up @@ -172,6 +182,13 @@ export class TaskFrontendContribution implements CommandContribution, MenuContri
execute: () => this.taskService.clearRecentTasks()
}
);

registry.registerCommand(
TaskCommands.TASK_TERMINATE,
{
execute: () => this.terminateTask()
}
);
}

registerMenus(menus: MenuModelRegistry): void {
Expand Down Expand Up @@ -212,4 +229,31 @@ export class TaskFrontendContribution implements CommandContribution, MenuContri
});
}

/**
* Terminate a running task.
*/
async terminateTask(): Promise<void> {
const task = await this.selectTask();
if (task) {
this.taskService.kill(task.taskId);
}
}

/**
* Prompt user to select a running task.
*/
protected async selectTask(): Promise<TaskInfo | undefined> {
const runningTasks: TaskInfo[] = await this.taskService.getRunningTasks();
const items: QuickPickItem<TaskInfo>[] = [];
runningTasks.forEach(task => {
items.push({
label: task.config.label,
value: task,
});
});
return this.quickPickService.show(runningTasks.map(
({ config }, index) => ({ label: config.label, value: runningTasks[index] })
), { placeholder: 'Select task to terminate' });
}

}

0 comments on commit 84c4764

Please sign in to comment.