Skip to content

Commit 4dd8591

Browse files
authored
fix: Remove file from remote environment (#609)
Signed-off-by: sheche <[email protected]>
1 parent 50d57c1 commit 4dd8591

File tree

6 files changed

+56
-16
lines changed

6 files changed

+56
-16
lines changed

package.json

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,11 @@
165165
"title": "%contributes.commands.java.view.package.moveFileToTrash%",
166166
"category": "Java"
167167
},
168+
{
169+
"command": "java.view.package.deleteFilePermanently",
170+
"title": "%contributes.commands.java.view.package.deleteFilePermanently%",
171+
"category": "Java"
172+
},
168173
{
169174
"command": "java.view.package.renameFile",
170175
"title": "%contributes.commands.java.view.package.renameFile%",
@@ -256,7 +261,13 @@
256261
"command": "java.view.package.moveFileToTrash",
257262
"key": "delete",
258263
"mac": "cmd+backspace",
259-
"when": "java:serverMode == Standard && focusedView == javaProjectExplorer"
264+
"when": "java:serverMode == Standard && focusedView == javaProjectExplorer && explorerResourceMoveableToTrash"
265+
},
266+
{
267+
"command": "java.view.package.deleteFilePermanently",
268+
"key": "delete",
269+
"mac": "cmd+backspace",
270+
"when": "java:serverMode == Standard && focusedView == javaProjectExplorer && !explorerResourceMoveableToTrash"
260271
}
261272
],
262273
"menus": {
@@ -330,6 +341,10 @@
330341
"command": "java.view.package.moveFileToTrash",
331342
"when": "false"
332343
},
344+
{
345+
"command": "java.view.package.deleteFilePermanently",
346+
"when": "false"
347+
},
333348
{
334349
"command": "java.project.build.workspace",
335350
"when": "false"
@@ -446,12 +461,22 @@
446461
},
447462
{
448463
"command": "java.view.package.moveFileToTrash",
449-
"when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/",
464+
"when": "view == javaProjectExplorer && explorerResourceMoveableToTrash && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/",
450465
"group": "7_modification@20"
451466
},
452467
{
453468
"command": "java.view.package.moveFileToTrash",
454-
"when": "view == javaProjectExplorer && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/",
469+
"when": "view == javaProjectExplorer && explorerResourceMoveableToTrash && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/",
470+
"group": "7_modification@20"
471+
},
472+
{
473+
"command": "java.view.package.deleteFilePermanently",
474+
"when": "view == javaProjectExplorer && !explorerResourceMoveableToTrash && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/",
475+
"group": "7_modification@20"
476+
},
477+
{
478+
"command": "java.view.package.deleteFilePermanently",
479+
"when": "view == javaProjectExplorer && !explorerResourceMoveableToTrash && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/",
455480
"group": "7_modification@20"
456481
},
457482
{

package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"contributes.commands.java.view.package.newPackage": "New Package",
2222
"contributes.commands.java.view.package.renameFile": "Rename",
2323
"contributes.commands.java.view.package.moveFileToTrash": "Delete",
24+
"contributes.commands.java.view.package.deleteFilePermanently": "Delete Permanently",
2425
"configuration.java.dependency.showMembers": "Show the members in the explorer",
2526
"configuration.java.dependency.syncWithFolderExplorer": "Synchronize Java Projects explorer selection with folder explorer",
2627
"configuration.java.dependency.autoRefresh": "Synchronize Java Projects explorer with changes",

package.nls.zh.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"contributes.commands.java.view.package.newPackage": "创建包",
2222
"contributes.commands.java.view.package.renameFile": "重命名",
2323
"contributes.commands.java.view.package.moveFileToTrash": "删除",
24+
"contributes.commands.java.view.package.deleteFilePermanently": "永久删除",
2425
"configuration.java.dependency.showMembers": "在 Java 项目管理器中显示成员",
2526
"configuration.java.dependency.syncWithFolderExplorer": "在 Java 项目管理器中同步关联当前打开的文件",
2627
"configuration.java.dependency.autoRefresh": "在 Java 项目管理器中自动同步修改",

src/commands.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export namespace Commands {
4040

4141
export const VIEW_PACKAGE_MOVE_FILE_TO_TRASH = "java.view.package.moveFileToTrash";
4242

43+
export const VIEW_PACKAGE_DELETE_FILE_PERMANENTLY = "java.view.package.deleteFilePermanently";
44+
4345
export const VIEW_PACKAGE_REVEAL_IN_PROJECT_EXPLORER = "java.view.package.revealInProjectExplorer";
4446

4547
export const JAVA_PROJECT_OPEN = "_java.project.open";

src/explorerCommands/delete.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
// Licensed under the MIT license.
33

44
import { Uri, window, workspace } from "vscode";
5+
import { sendError } from "vscode-extension-telemetry-wrapper";
56
import { DataNode } from "../views/dataNode";
67
import { isMutable } from "./utility";
78

8-
const confirmMessage = "Move to Recycle Bin";
9-
10-
export async function deleteFiles(node?: DataNode): Promise<void> {
9+
export async function deleteFiles(node: DataNode | undefined, useTrash: boolean): Promise<void> {
1110
if (!node?.uri || !isMutable(node)) {
1211
return;
1312
}
1413

1514
const children = await node.getChildren();
1615
const isFolder = children && children.length !== 0;
17-
const message = getInformationMessage(node.name, isFolder);
16+
const message = getInformationMessage(node.name, isFolder, useTrash);
17+
const confirmMessage = useTrash ? "Move to Recycle Bin" : "Delete";
1818

1919
const answer: string | undefined = await window.showInformationMessage(
2020
message,
@@ -23,16 +23,24 @@ export async function deleteFiles(node?: DataNode): Promise<void> {
2323
);
2424

2525
if (answer === confirmMessage) {
26-
workspace.fs.delete(Uri.parse(node.uri), {
27-
recursive: true,
28-
useTrash: true,
29-
});
26+
try {
27+
await workspace.fs.delete(Uri.parse(node.uri), {
28+
recursive: true,
29+
useTrash,
30+
});
31+
} catch (e) {
32+
// See: https://github.com/microsoft/vscode-java-dependency/issues/608
33+
sendError(new Error("Failed to remove files."));
34+
}
3035
}
3136
}
3237

33-
function getInformationMessage(name: string, isFolder: boolean): string {
38+
function getInformationMessage(name: string, isFolder: boolean, useTrash: boolean): string {
3439
const folderMsg = isFolder ? " and its contents" : "";
35-
const msg = `Are you sure you want to delete \'${name}\'${folderMsg}?\n\n`;
36-
const additionMsg = "You can restore from the Recycle Bin.";
37-
return msg + additionMsg;
40+
let msg = `Are you sure you want to ${useTrash ? "" : "permanently "}delete \'${name}\'${folderMsg}?`;
41+
42+
if (useTrash) {
43+
msg += "\n\nYou can restore from the Recycle Bin.";
44+
}
45+
return msg;
3846
}

src/views/dependencyExplorer.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,10 @@ export class DependencyExplorer implements Disposable {
126126
renameFile(getCmdNode(this._dependencyViewer.selection, node));
127127
}),
128128
instrumentOperationAsVsCodeCommand(Commands.VIEW_PACKAGE_MOVE_FILE_TO_TRASH, (node?: DataNode) => {
129-
deleteFiles(getCmdNode(this._dependencyViewer.selection, node));
129+
deleteFiles(getCmdNode(this._dependencyViewer.selection, node), true);
130+
}),
131+
instrumentOperationAsVsCodeCommand(Commands.VIEW_PACKAGE_DELETE_FILE_PERMANENTLY, (node?: DataNode) => {
132+
deleteFiles(getCmdNode(this._dependencyViewer.selection, node), false);
130133
}),
131134
);
132135
}

0 commit comments

Comments
 (0)