From 4f5b849b6e8f1b6675f40342c97d8d87805492c2 Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Mon, 9 Jan 2023 08:09:24 +0100 Subject: [PATCH] fix: update Examples and Include Library menu after ZIP install Closes #659 Signed-off-by: Akos Kitta --- .../src/browser/notification-center.ts | 6 ++-- .../common/protocol/notification-service.ts | 4 ++- .../src/node/library-service-impl.ts | 34 +++++++++++-------- .../src/node/notification-service-server.ts | 4 ++- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/arduino-ide-extension/src/browser/notification-center.ts b/arduino-ide-extension/src/browser/notification-center.ts index 0ed0a2645..96c938d25 100644 --- a/arduino-ide-extension/src/browser/notification-center.ts +++ b/arduino-ide-extension/src/browser/notification-center.ts @@ -56,7 +56,7 @@ export class NotificationCenter item: BoardsPackage; }>(); private readonly libraryDidInstallEmitter = new Emitter<{ - item: LibraryPackage; + item: LibraryPackage | 'zip-install'; }>(); private readonly libraryDidUninstallEmitter = new Emitter<{ item: LibraryPackage; @@ -156,7 +156,9 @@ export class NotificationCenter this.platformDidUninstallEmitter.fire(event); } - notifyLibraryDidInstall(event: { item: LibraryPackage }): void { + notifyLibraryDidInstall(event: { + item: LibraryPackage | 'zip-install'; + }): void { this.libraryDidInstallEmitter.fire(event); } diff --git a/arduino-ide-extension/src/common/protocol/notification-service.ts b/arduino-ide-extension/src/common/protocol/notification-service.ts index fa951a961..eba8f798e 100644 --- a/arduino-ide-extension/src/common/protocol/notification-service.ts +++ b/arduino-ide-extension/src/common/protocol/notification-service.ts @@ -62,7 +62,9 @@ export interface NotificationServiceClient { notifyPlatformDidUninstall(event: { item: BoardsPackage }): void; // Libraries - notifyLibraryDidInstall(event: { item: LibraryPackage }): void; + notifyLibraryDidInstall(event: { + item: LibraryPackage | 'zip-install'; + }): void; notifyLibraryDidUninstall(event: { item: LibraryPackage }): void; // Boards discovery diff --git a/arduino-ide-extension/src/node/library-service-impl.ts b/arduino-ide-extension/src/node/library-service-impl.ts index bdd9631f1..db36b2c50 100644 --- a/arduino-ide-extension/src/node/library-service-impl.ts +++ b/arduino-ide-extension/src/node/library-service-impl.ts @@ -373,22 +373,26 @@ export class LibraryServiceImpl // stop the board discovery await this.boardDiscovery.stop(); - - const resp = client.zipLibraryInstall(req); - resp.on( - 'data', - ExecuteWithProgress.createDataCallback({ - progressId, - responseService: this.responseService, - }) - ); - await new Promise((resolve, reject) => { - resp.on('end', () => { - this.boardDiscovery.start(); // TODO: remove discovery dependency from boards service. See https://github.com/arduino/arduino-ide/pull/1107 why this is here. - resolve(); + try { + const resp = client.zipLibraryInstall(req); + resp.on( + 'data', + ExecuteWithProgress.createDataCallback({ + progressId, + responseService: this.responseService, + }) + ); + await new Promise((resolve, reject) => { + resp.on('end', resolve); + resp.on('error', reject); }); - resp.on('error', reject); - }); + await this.refresh(); // let the CLI re-scan the libraries + this.notificationServer.notifyLibraryDidInstall({ + item: 'zip-install', + }); + } finally { + this.boardDiscovery.start(); // TODO: remove discovery dependency from boards service. See https://github.com/arduino/arduino-ide/pull/1107 why this is here. + } } async uninstall(options: { diff --git a/arduino-ide-extension/src/node/notification-service-server.ts b/arduino-ide-extension/src/node/notification-service-server.ts index 5fcb023d2..ce6a96304 100644 --- a/arduino-ide-extension/src/node/notification-service-server.ts +++ b/arduino-ide-extension/src/node/notification-service-server.ts @@ -59,7 +59,9 @@ export class NotificationServiceServerImpl this.clients.forEach((client) => client.notifyPlatformDidUninstall(event)); } - notifyLibraryDidInstall(event: { item: LibraryPackage }): void { + notifyLibraryDidInstall(event: { + item: LibraryPackage | 'zip-install'; + }): void { this.clients.forEach((client) => client.notifyLibraryDidInstall(event)); }