From 431c3bdf2b5560215de07d2ef954ca3244db25a5 Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Mon, 11 Jul 2022 11:42:46 +0200 Subject: [PATCH] Restart discovery after re-initializing client. Otherwise, board discovery stops working after indexes update. Signed-off-by: Akos Kitta --- arduino-ide-extension/src/node/board-discovery.ts | 7 ++++++- .../src/node/core-client-provider.ts | 13 ++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/arduino-ide-extension/src/node/board-discovery.ts b/arduino-ide-extension/src/node/board-discovery.ts index f2d2dcb4..9a83df31 100644 --- a/arduino-ide-extension/src/node/board-discovery.ts +++ b/arduino-ide-extension/src/node/board-discovery.ts @@ -56,6 +56,11 @@ export class BoardDiscovery extends CoreClientAware { @postConstruct() protected async init(): Promise { this.coreClient.then((client) => this.startBoardListWatch(client)); + this.onClientDidRefresh((client) => + this.stopBoardListWatch(client).then(() => + this.startBoardListWatch(client) + ) + ); } stopBoardListWatch(coreClient: CoreClientProvider.Client): Promise { @@ -79,7 +84,7 @@ export class BoardDiscovery extends CoreClientAware { startBoardListWatch(coreClient: CoreClientProvider.Client): void { if (this.watching) { // We want to avoid starting the board list watch process multiple - // times to meet unforseen consequences + // times to meet unforeseen consequences return; } this.watching = true; diff --git a/arduino-ide-extension/src/node/core-client-provider.ts b/arduino-ide-extension/src/node/core-client-provider.ts index 404b7642..2559e79d 100644 --- a/arduino-ide-extension/src/node/core-client-provider.ts +++ b/arduino-ide-extension/src/node/core-client-provider.ts @@ -5,7 +5,7 @@ import { injectable, postConstruct, } from '@theia/core/shared/inversify'; -import { Emitter } from '@theia/core/lib/common/event'; +import { Emitter, Event } from '@theia/core/lib/common/event'; import { ArduinoCoreServiceClient } from './cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb'; import { Instance } from './cli-protocol/cc/arduino/cli/commands/v1/common_pb'; import { @@ -53,6 +53,8 @@ export class CoreClientProvider { private readonly onClientReadyEmitter = new Emitter(); private readonly onClientReady = this.onClientReadyEmitter.event; + private readonly onClientDidRefreshEmitter = + new Emitter(); @postConstruct() protected init(): void { @@ -88,6 +90,10 @@ export class CoreClientProvider { return this.pending.promise; } + get onClientDidRefresh(): Event { + return this.onClientDidRefreshEmitter.event; + } + /** * Encapsulates both the gRPC core client creation (`CreateRequest`) and initialization (`InitRequest`). */ @@ -253,6 +259,7 @@ export class CoreClientProvider { await this.initInstance(client); // notify clients about the index update only after the client has been "re-initialized" and the new content is available. progressHandler.reportEnd(); + this.onClientDidRefreshEmitter.fire(client); } catch (err) { console.error('Failed to update indexes', err); progressHandler.reportError( @@ -404,6 +411,10 @@ export abstract class CoreClientAware { protected get coreClient(): Promise { return this.coreClientProvider.client; } + + protected get onClientDidRefresh(): Event { + return this.coreClientProvider.onClientDidRefresh; + } } class IndexUpdateRequiredBeforeInitError extends Error {