Skip to content

Commit

Permalink
feat: Run task when double clicking tasks (#1174)
Browse files Browse the repository at this point in the history
  • Loading branch information
CsCherrYY authored Feb 28, 2022
1 parent b1dae6d commit 3c9a73a
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 27 deletions.
9 changes: 6 additions & 3 deletions extension/src/commands/Commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ import {
OpenSettingsCommand,
COMMAND_OPEN_BUILD_FILE,
OpenBuildFileCommand,
COMMAND_OPEN_BUILD_FILE_DOUBLE_CLICK,
OpenBuildFileDoubleClickCommand,
COMMAND_CANCELLING_TREE_ITEM_TASK,
CancellingTreeItemTaskCommand,
COMMAND_SHOW_LOGS,
Expand All @@ -65,6 +63,8 @@ import {
FindTaskCommand,
UnpinTaskCommand,
COMMAND_UNPIN_TASK,
COMMAND_RUN_TASK_DOUBLE_CLICK,
RunTaskDoubleClickCommand,
} from ".";
import { GradleClient } from "../client";
import { GradleBuildContentProvider } from "../client/GradleBuildContentProvider";
Expand Down Expand Up @@ -111,6 +111,10 @@ export class Commands {
register(): void {
this.registerCommand(COMMAND_SHOW_TASKS, new ShowTasksCommand(this.gradleTasksTreeView));
this.registerCommand(COMMAND_RUN_TASK, new RunTaskCommand(this.rootProjectsStore, this.client));
this.registerCommand(
COMMAND_RUN_TASK_DOUBLE_CLICK,
new RunTaskDoubleClickCommand(this.rootProjectsStore, this.client)
);
this.registerCommand(COMMAND_DEBUG_TASK, new DebugTaskCommand(this.rootProjectsStore, this.client));
this.registerCommand(COMMAND_RESTART_TASK, new RestartTaskCommand(this.client));
this.registerCommand(
Expand Down Expand Up @@ -148,7 +152,6 @@ export class Commands {
this.registerCommand(COMMAND_OPEN_SETTINGS, new OpenSettingsCommand());
this.registerCommand(COMMAND_OPEN_BUILD_FILE, new OpenBuildFileCommand());

this.registerCommand(COMMAND_OPEN_BUILD_FILE_DOUBLE_CLICK, new OpenBuildFileDoubleClickCommand());
this.registerCommand(COMMAND_CANCELLING_TREE_ITEM_TASK, new CancellingTreeItemTaskCommand());
this.registerCommand(COMMAND_SHOW_LOGS, new ShowLogsCommand());
this.registerCommand(
Expand Down
21 changes: 0 additions & 21 deletions extension/src/commands/OpenBuildFileCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,11 @@ import { GradleTaskTreeItem } from "../views";
import { Command } from "./Command";

export const COMMAND_OPEN_BUILD_FILE = "gradle.openBuildFile";
export const COMMAND_OPEN_BUILD_FILE_DOUBLE_CLICK = "gradle.openBuildFileDoubleClick";

let lastOpenedDate: Date;

function checkDoubleClick(): boolean {
let result = false;
if (lastOpenedDate) {
const dateDiff = new Date().getTime() - lastOpenedDate.getTime();
result = dateDiff < 500;
}
lastOpenedDate = new Date();
return result;
}

async function run(taskItem: GradleTaskTreeItem): Promise<void> {
await vscode.commands.executeCommand("vscode.open", vscode.Uri.file(taskItem.task.definition.buildFile));
}

export class OpenBuildFileDoubleClickCommand extends Command {
async run(taskItem: GradleTaskTreeItem): Promise<void> {
if (checkDoubleClick()) {
return run(taskItem);
}
}
}

export class OpenBuildFileCommand extends Command {
async run(taskItem: GradleTaskTreeItem): Promise<void> {
return run(taskItem);
Expand Down
26 changes: 24 additions & 2 deletions extension/src/commands/RunTaskCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,38 @@ import { runTask } from "../tasks/taskUtil";
import { Command } from "./Command";
import { RootProjectsStore } from "../stores";
import { GradleClient } from "../client";
import { DoubleClickChecker } from "../util/DoubleClickChecker";

export const COMMAND_RUN_TASK = "gradle.runTask";
export const COMMAND_RUN_TASK_DOUBLE_CLICK = "gradle.runTaskDoubleClick";

async function run(treeItem: GradleTaskTreeItem, rootProjectsStore: RootProjectsStore, client: GradleClient) {
if (treeItem && treeItem.task) {
await runTask(rootProjectsStore, treeItem.task, client);
}
}

export class RunTaskCommand extends Command {
constructor(private rootProjectsStore: RootProjectsStore, private client: GradleClient) {
super();
}

async run(treeItem: GradleTaskTreeItem): Promise<void> {
run(treeItem, this.rootProjectsStore, this.client);
}
}

export class RunTaskDoubleClickCommand extends Command {
private doubleClickChecker: DoubleClickChecker;

constructor(private rootProjectsStore: RootProjectsStore, private client: GradleClient) {
super();
this.doubleClickChecker = new DoubleClickChecker();
}

async run(treeItem: GradleTaskTreeItem): Promise<void> {
if (treeItem && treeItem.task) {
await runTask(this.rootProjectsStore, treeItem.task, this.client);
if (this.doubleClickChecker.checkDoubleClick(treeItem)) {
return run(treeItem, this.rootProjectsStore, this.client);
}
}
}
28 changes: 28 additions & 0 deletions extension/src/util/DoubleClickChecker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

import * as vscode from "vscode";

export class DoubleClickChecker {
private lastDate: Date | undefined;
private lastItem: vscode.TreeItem | undefined;

private resetState(): void {
this.lastDate = undefined;
this.lastItem = undefined;
}

private setState(item: vscode.TreeItem): void {
this.lastDate = new Date();
this.lastItem = item;
}

public checkDoubleClick(item: vscode.TreeItem): boolean {
if (this.lastDate && new Date().getTime() - this.lastDate.getTime() < 500 && this.lastItem === item) {
this.resetState();
return true;
}
this.setState(item);
return false;
}
}
3 changes: 2 additions & 1 deletion extension/src/views/gradleTasks/GradleTaskTreeItem.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as vscode from "vscode";
import { COMMAND_RUN_TASK_DOUBLE_CLICK } from "../../commands";
import { Icons } from "../../icons";
import { TASK_STATE_RUNNING_REGEX } from "../constants";
import { getTreeItemState } from "../viewUtil";
Expand All @@ -16,7 +17,7 @@ export class GradleTaskTreeItem extends vscode.TreeItem {
super(label, vscode.TreeItemCollapsibleState.None);
this.command = {
title: "Run Task",
command: "gradle.openBuildFileDoubleClick",
command: COMMAND_RUN_TASK_DOUBLE_CLICK,
arguments: [this],
};
}
Expand Down

0 comments on commit 3c9a73a

Please sign in to comment.