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 31, 2019
1 parent 436b812 commit 37b60b1
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 2 deletions.
44 changes: 44 additions & 0 deletions packages/task/src/browser/quick-open-task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -329,3 +329,47 @@ export class TaskConfigureQuickOpenItem extends QuickOpenGroupItem {
return true;
}
}

@injectable()
export class TaskTerminateQuickOpen implements QuickOpenModel {

@inject(QuickOpenService)
protected readonly quickOpenService: QuickOpenService;

@inject(TaskService)
protected readonly taskService: TaskService;

async onType(_lookFor: string, acceptor: (items: QuickOpenItem[]) => void): Promise<void> {
const items: QuickOpenItem[] = [];
const runningTasks: TaskInfo[] = await this.taskService.getRunningTasks();
if (runningTasks.length <= 0) {
items.push(new QuickOpenItem({
label: 'No task is currently running',
run: (): boolean => false,
}));
} else {
runningTasks.forEach((task: TaskInfo) => {
items.push(new QuickOpenItem({
label: task.config.label,
run: (mode: QuickOpenMode): boolean => {
if (mode !== QuickOpenMode.OPEN) {
return false;
}
this.taskService.kill(task.taskId);
return true;
}
}));
});
}
acceptor(items);
}

async open(): Promise<void> {
this.quickOpenService.open(this, {
placeholder: 'Select task to terminate',
fuzzyMatchLabel: true,
fuzzyMatchDescription: true,
});
}

}
18 changes: 17 additions & 1 deletion packages/task/src/browser/task-frontend-contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import { inject, injectable, named } from 'inversify';
import { ILogger, ContributionProvider } from '@theia/core/lib/common';
import { QuickOpenTask } from './quick-open-task';
import { QuickOpenTask, TaskTerminateQuickOpen } from './quick-open-task';
import { CommandContribution, Command, CommandRegistry, MenuContribution, MenuModelRegistry } from '@theia/core/lib/common';
import {
FrontendApplication, FrontendApplicationContribution, QuickOpenContribution,
Expand Down Expand Up @@ -66,6 +66,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 +108,9 @@ export class TaskFrontendContribution implements CommandContribution, MenuContri
@inject(StorageService)
protected readonly storageService: StorageService;

@inject(TaskTerminateQuickOpen)
protected readonly taskTerminateQuickOpen: TaskTerminateQuickOpen;

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

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

registerMenus(menus: MenuModelRegistry): void {
Expand Down
3 changes: 2 additions & 1 deletion packages/task/src/browser/task-frontend-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { ContainerModule } from 'inversify';
import { FrontendApplicationContribution, QuickOpenContribution, KeybindingContribution } from '@theia/core/lib/browser';
import { CommandContribution, MenuContribution, bindContributionProvider } from '@theia/core/lib/common';
import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging';
import { QuickOpenTask } from './quick-open-task';
import { QuickOpenTask, TaskTerminateQuickOpen } from './quick-open-task';
import { TaskContribution, TaskProviderRegistry, TaskResolverRegistry } from './task-contribution';
import { TaskService } from './task-service';
import { TaskConfigurations } from './task-configurations';
Expand All @@ -43,6 +43,7 @@ export default new ContainerModule(bind => {
}

bind(QuickOpenTask).toSelf().inSingletonScope();
bind(TaskTerminateQuickOpen).toSelf().inSingletonScope();
bind(TaskConfigurations).toSelf().inSingletonScope();
bind(ProvidedTaskConfigurations).toSelf().inSingletonScope();

Expand Down

0 comments on commit 37b60b1

Please sign in to comment.