From c50d45c663fa28d84261914a4677886c1b7cd115 Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Wed, 7 Apr 2021 12:38:40 +0200 Subject: [PATCH] GH-297: Fixed the open from `Sketchbook` handler. When running the handler for the `Sketchbook` menu, do not clone the sketch. Closes #297 Signed-off-by: Akos Kitta --- .../src/browser/contributions/examples.ts | 17 +++++++++++------ .../src/browser/contributions/sketchbook.ts | 11 +++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/arduino-ide-extension/src/browser/contributions/examples.ts b/arduino-ide-extension/src/browser/contributions/examples.ts index 86ae30d3..510b3c4e 100644 --- a/arduino-ide-extension/src/browser/contributions/examples.ts +++ b/arduino-ide-extension/src/browser/contributions/examples.ts @@ -1,5 +1,6 @@ import * as PQueue from 'p-queue'; import { inject, injectable, postConstruct } from 'inversify'; +import { CommandHandler } from '@theia/core/lib/common/command'; import { MenuPath, CompositeMenuNode, SubMenuOptions } from '@theia/core/lib/common/menu'; import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable'; import { OpenSketch } from './open-sketch'; @@ -93,12 +94,7 @@ export abstract class Examples extends SketchContribution { const { uri } = sketch; const commandId = `arduino-open-example-${submenuPath.join(':')}--${uri}`; const command = { id: commandId }; - const handler = { - execute: async () => { - const sketch = await this.sketchService.cloneExample(uri); - this.commandService.executeCommand(OpenSketch.Commands.OPEN_SKETCH.id, sketch); - } - }; + const handler = this.createHandler(uri); pushToDispose.push(this.commandRegistry.registerCommand(command, handler)); this.menuRegistry.registerMenuAction(submenuPath, { commandId, label: sketch.name, order: sketch.name.toLocaleLowerCase() }); pushToDispose.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(command))); @@ -106,6 +102,15 @@ export abstract class Examples extends SketchContribution { } } + protected createHandler(uri: string): CommandHandler { + return { + execute: async () => { + const sketch = await this.sketchService.cloneExample(uri); + return this.commandService.executeCommand(OpenSketch.Commands.OPEN_SKETCH.id, sketch); + } + } + } + } @injectable() diff --git a/arduino-ide-extension/src/browser/contributions/sketchbook.ts b/arduino-ide-extension/src/browser/contributions/sketchbook.ts index 9264bed5..117d0709 100644 --- a/arduino-ide-extension/src/browser/contributions/sketchbook.ts +++ b/arduino-ide-extension/src/browser/contributions/sketchbook.ts @@ -1,10 +1,12 @@ import { inject, injectable } from 'inversify'; +import { CommandHandler } from '@theia/core/lib/common/command'; import { CommandRegistry, MenuModelRegistry } from './contribution'; import { ArduinoMenus } from '../menu/arduino-menus'; import { MainMenuManager } from '../../common/main-menu-manager'; import { NotificationCenter } from '../notification-center'; import { Examples } from './examples'; import { SketchContainer } from '../../common/protocol'; +import { OpenSketch } from './open-sketch'; @injectable() export class Sketchbook extends Examples { @@ -43,4 +45,13 @@ export class Sketchbook extends Examples { this.registerRecursively([...container.children, ...container.sketches], ArduinoMenus.FILE__SKETCHBOOK_SUBMENU, this.toDispose); } + protected createHandler(uri: string): CommandHandler { + return { + execute: async () => { + const sketch = await this.sketchService.loadSketch(uri); + return this.commandService.executeCommand(OpenSketch.Commands.OPEN_SKETCH.id, sketch); + } + } + } + }