arduino-ide/arduino-ide-extension/src/node/notification-service-server.ts
Akos Kitta b2bf368db9 fix: update Examples and Include Library menu after ZIP install
Closes #659

Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
2023-01-11 09:23:23 +01:00

110 lines
3.1 KiB
TypeScript

import { injectable } from '@theia/core/shared/inversify';
import type {
NotificationServiceServer,
NotificationServiceClient,
AttachedBoardsChangeEvent,
BoardsPackage,
LibraryPackage,
ConfigState,
Sketch,
ProgressMessage,
IndexUpdateWillStartParams,
IndexUpdateDidCompleteParams,
IndexUpdateDidFailParams,
} from '../common/protocol';
@injectable()
export class NotificationServiceServerImpl
implements NotificationServiceServer
{
private readonly clients: NotificationServiceClient[] = [];
notifyDidReinitialize(): void {
this.clients.forEach((client) => client.notifyDidReinitialize());
}
notifyIndexUpdateWillStart(params: IndexUpdateWillStartParams): void {
this.clients.forEach((client) => client.notifyIndexUpdateWillStart(params));
}
notifyIndexUpdateDidProgress(progressMessage: ProgressMessage): void {
this.clients.forEach((client) =>
client.notifyIndexUpdateDidProgress(progressMessage)
);
}
notifyIndexUpdateDidComplete(params: IndexUpdateDidCompleteParams): void {
this.clients.forEach((client) =>
client.notifyIndexUpdateDidComplete(params)
);
}
notifyIndexUpdateDidFail(params: IndexUpdateDidFailParams): void {
this.clients.forEach((client) => client.notifyIndexUpdateDidFail(params));
}
notifyDaemonDidStart(port: string): void {
this.clients.forEach((client) => client.notifyDaemonDidStart(port));
}
notifyDaemonDidStop(): void {
this.clients.forEach((client) => client.notifyDaemonDidStop());
}
notifyPlatformDidInstall(event: { item: BoardsPackage }): void {
this.clients.forEach((client) => client.notifyPlatformDidInstall(event));
}
notifyPlatformDidUninstall(event: { item: BoardsPackage }): void {
this.clients.forEach((client) => client.notifyPlatformDidUninstall(event));
}
notifyLibraryDidInstall(event: {
item: LibraryPackage | 'zip-install';
}): void {
this.clients.forEach((client) => client.notifyLibraryDidInstall(event));
}
notifyLibraryDidUninstall(event: { item: LibraryPackage }): void {
this.clients.forEach((client) => client.notifyLibraryDidUninstall(event));
}
notifyAttachedBoardsDidChange(event: AttachedBoardsChangeEvent): void {
this.clients.forEach((client) =>
client.notifyAttachedBoardsDidChange(event)
);
}
notifyConfigDidChange(event: ConfigState): void {
this.clients.forEach((client) => client.notifyConfigDidChange(event));
}
notifyRecentSketchesDidChange(event: { sketches: Sketch[] }): void {
this.clients.forEach((client) =>
client.notifyRecentSketchesDidChange(event)
);
}
setClient(client: NotificationServiceClient): void {
this.clients.push(client);
}
disposeClient(client: NotificationServiceClient): void {
const index = this.clients.indexOf(client);
if (index === -1) {
console.warn(
'Could not dispose notification service client. It was not registered.'
);
return;
}
this.clients.splice(index, 1);
}
dispose(): void {
for (const client of this.clients) {
this.disposeClient(client);
}
this.clients.length = 0;
}
}