From efd1be3e8506936b6750cdb1b4a6a21295283be6 Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Sat, 1 Aug 2020 17:47:03 +0200 Subject: [PATCH] wipe original after sketch rename. Signed-off-by: Akos Kitta --- .../browser/contributions/save-as-sketch.ts | 12 +++++++++-- .../browser/contributions/sketch-control.ts | 2 +- .../theia/workspace/workspace-commands.ts | 20 ++++++++++++------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts b/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts index c93fff27..26428b76 100644 --- a/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts @@ -31,7 +31,7 @@ export class SaveAsSketch extends SketchContribution { /** * Resolves `true` if the sketch was successfully saved as something. */ - async saveAs({ execOnlyIfTemp, openAfterMove }: SaveAsSketch.Options = SaveAsSketch.Options.DEFAULT): Promise { + async saveAs({ execOnlyIfTemp, openAfterMove, wipeOriginal }: SaveAsSketch.Options = SaveAsSketch.Options.DEFAULT): Promise { const sketch = await this.sketchServiceClient.currentSketch(); if (!sketch) { return false; @@ -60,6 +60,9 @@ export class SaveAsSketch extends SketchContribution { } const workspaceUri = await this.sketchService.copy(sketch, { destinationUri }); if (workspaceUri && openAfterMove) { + if (wipeOriginal) { + await this.fileSystem.delete(sketch.uri); + } this.workspaceService.open(new URI(workspaceUri), { preserveWindow: true }); } return !!workspaceUri; @@ -76,11 +79,16 @@ export namespace SaveAsSketch { export interface Options { readonly execOnlyIfTemp?: boolean; readonly openAfterMove?: boolean; + /** + * Ignored if `openAfterMove` is `false`. + */ + readonly wipeOriginal?: boolean; } export namespace Options { export const DEFAULT: Options = { execOnlyIfTemp: false, - openAfterMove: true + openAfterMove: true, + wipeOriginal: false }; } } diff --git a/arduino-ide-extension/src/browser/contributions/sketch-control.ts b/arduino-ide-extension/src/browser/contributions/sketch-control.ts index 58c04b69..f7d0fcb0 100644 --- a/arduino-ide-extension/src/browser/contributions/sketch-control.ts +++ b/arduino-ide-extension/src/browser/contributions/sketch-control.ts @@ -78,7 +78,7 @@ export class SketchControl extends SketchContribution { order: '1' }); registry.registerMenuAction(ArduinoMenus.SKETCH_CONTROL__CONTEXT__MAIN_GROUP, { - commandId: WorkspaceCommands.FILE_DELETE.id, + commandId: WorkspaceCommands.FILE_DELETE.id, // TODO: customize delete. Wipe sketch if deleting main file. Close window. label: 'Delete', order: '2' }); diff --git a/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts b/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts index b167b72b..c424148e 100644 --- a/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts +++ b/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts @@ -48,7 +48,7 @@ export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribut }, this.labelProvider); const name = await dialog.open(); - const nameWithExt = this.appendInoExtensionMaybe(name); + const nameWithExt = this.maybeAppendInoExt(name); if (nameWithExt) { const fileUri = parentUri.resolve(nameWithExt); await this.fileSystem.createFile(fileUri.toString()); @@ -61,7 +61,7 @@ export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribut // In the Java IDE the followings are the rules: // - `name` without an extension should default to `name.ino`. // - `name` with a single trailing `.` also defaults to `name.ino`. - const nameWithExt = this.appendInoExtensionMaybe(name); + const nameWithExt = this.maybeAppendInoExt(name); const errorMessage = await super.validateFileName(nameWithExt, parent, recursive); if (errorMessage) { return errorMessage; @@ -76,7 +76,7 @@ export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribut return ''; } - protected appendInoExtensionMaybe(name: string | undefined): string { + protected maybeAppendInoExt(name: string | undefined): string { if (!name) { return ''; } @@ -100,7 +100,12 @@ export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribut return; } if (uri.toString() === sketch.mainFileUri) { - await this.commandService.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, { execOnlyIfTemp: false, openAfterMove: true }); + const options = { + execOnlyIfTemp: false, + openAfterMove: true, + wipeOriginal: true + }; + await this.commandService.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, options); return; } const parent = await this.getParent(uri); @@ -122,10 +127,11 @@ export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribut return this.validateFileName(name, parent, false); } }); - const fileName = await dialog.open(); - if (fileName) { + const newName = await dialog.open(); + const newNameWithExt = this.maybeAppendInoExt(newName); + if (newNameWithExt) { const oldUri = uri; - const newUri = uri.parent.resolve(fileName); + const newUri = uri.parent.resolve(newNameWithExt); this.fileSystem.move(oldUri.toString(), newUri.toString()); } }