diff options
Diffstat (limited to 'packages/core/src')
| -rw-r--r-- | packages/core/src/ide/ide-client.ts | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/packages/core/src/ide/ide-client.ts b/packages/core/src/ide/ide-client.ts index 0a99f0de..efb9c8f0 100644 --- a/packages/core/src/ide/ide-client.ts +++ b/packages/core/src/ide/ide-client.ts @@ -63,6 +63,7 @@ export class IdeClient { private readonly currentIde: DetectedIde | undefined; private readonly currentIdeDisplayName: string | undefined; private diffResponses = new Map<string, (result: DiffUpdateResult) => void>(); + private statusListeners = new Set<(state: IDEConnectionState) => void>(); private constructor() { this.currentIde = detectIde(); @@ -78,6 +79,14 @@ export class IdeClient { return IdeClient.instance; } + addStatusChangeListener(listener: (state: IDEConnectionState) => void) { + this.statusListeners.add(listener); + } + + removeStatusChangeListener(listener: (state: IDEConnectionState) => void) { + this.statusListeners.delete(listener); + } + async connect(): Promise<void> { if (!this.currentIde || !this.currentIdeDisplayName) { this.setState( @@ -237,6 +246,9 @@ export class IdeClient { // disconnected, so that the first detail message is preserved. if (!isAlreadyDisconnected) { this.state = { status, details }; + for (const listener of this.statusListeners) { + listener(this.state); + } if (details) { if (logToConsole) { logger.error(details); @@ -390,7 +402,6 @@ export class IdeClient { logger.debug('Failed to close transport:', closeError); } } - logger.error(`Failed to connect: ${_error}`); return false; } } |
