diff --git a/packages/core/src/common/ipc/catalog.ts b/packages/core/src/common/ipc/catalog.ts index 3d316d211c..38780cbd2c 100644 --- a/packages/core/src/common/ipc/catalog.ts +++ b/packages/core/src/common/ipc/catalog.ts @@ -8,11 +8,6 @@ */ export const catalogEntityRunListener = "catalog-entity:run"; -/** - * This is broadcast on whenever there is an update to any catalog item - */ -export const catalogItemsChannel = "catalog:items"; - /** * This can be sent from renderer to main to initialize a broadcast of ITEMS */ diff --git a/packages/core/src/features/catalog/entities-sync/common/channel.ts b/packages/core/src/features/catalog/entities-sync/common/channel.ts new file mode 100644 index 0000000000..b902237311 --- /dev/null +++ b/packages/core/src/features/catalog/entities-sync/common/channel.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { CatalogEntityData, CatalogEntityKindData } from "../../../../common/catalog"; +import type { MessageChannel } from "../../../../common/utils/channel/message-channel-listener-injection-token"; + +export const currentCatalogEntityRegistryStateChannel: MessageChannel<(CatalogEntityData & CatalogEntityKindData)[]> = { + id: "current-catalog-entity-registry-state", +}; diff --git a/packages/core/src/features/catalog/entities-sync/main/broadcast.injectable.ts b/packages/core/src/features/catalog/entities-sync/main/broadcast.injectable.ts new file mode 100644 index 0000000000..05c10c3718 --- /dev/null +++ b/packages/core/src/features/catalog/entities-sync/main/broadcast.injectable.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { debounce } from "lodash"; +import type { MessageChannelSender } from "../../../../common/utils/channel/message-to-channel-injection-token"; +import { sendMessageToChannelInjectionToken } from "../../../../common/utils/channel/message-to-channel-injection-token"; +import { currentCatalogEntityRegistryStateChannel } from "../common/channel"; + +export type BroadcastCurrentCatalogEntityRegistryState = MessageChannelSender; + +const broadcastCurrentCatalogEntityRegistryStateInjectable = getInjectable({ + id: "broadcast-current-catalog-entity-registry-state", + instantiate: (di) => { + const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken); + const handler: BroadcastCurrentCatalogEntityRegistryState = (items) => sendMessageToChannel(currentCatalogEntityRegistryStateChannel, items); + + return debounce( + handler, + 100, + { + leading: true, + trailing: true, + }, + ); + }, +}); + +export default broadcastCurrentCatalogEntityRegistryStateInjectable; diff --git a/packages/core/src/features/catalog/entities-sync/renderer/listener.injectable.ts b/packages/core/src/features/catalog/entities-sync/renderer/listener.injectable.ts new file mode 100644 index 0000000000..6140b48a49 --- /dev/null +++ b/packages/core/src/features/catalog/entities-sync/renderer/listener.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getMessageChannelListenerInjectable } from "../../../../common/utils/channel/message-channel-listener-injection-token"; +import catalogEntityRegistryInjectable from "../../../../renderer/api/catalog/entity/registry.injectable"; +import { currentCatalogEntityRegistryStateChannel } from "../common/channel"; + +const currentCatalogEntityRegistryStateListenerInjectable = getMessageChannelListenerInjectable({ + channel: currentCatalogEntityRegistryStateChannel, + id: "main", + handler: (di) => { + const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); + + return (items) => catalogEntityRegistry.updateItems(items); + }, +}); + +export default currentCatalogEntityRegistryStateListenerInjectable; diff --git a/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts deleted file mode 100644 index fce2e7d2eb..0000000000 --- a/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { debounce } from "lodash"; -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; -import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; - -export default getGlobalOverride(catalogSyncBroadcasterInjectable, () => debounce(() => {})); diff --git a/packages/core/src/main/catalog-sync-to-renderer/broadcaster.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/broadcaster.injectable.ts deleted file mode 100644 index cab7ff86f0..0000000000 --- a/packages/core/src/main/catalog-sync-to-renderer/broadcaster.injectable.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectable } from "@ogre-tools/injectable"; -import { debounce } from "lodash"; -import type { CatalogEntity } from "../../common/catalog"; -import broadcastMessageInjectable from "../../common/ipc/broadcast-message.injectable"; -import { catalogItemsChannel } from "../../common/ipc/catalog"; - -const catalogSyncBroadcasterInjectable = getInjectable({ - id: "catalog-sync-broadcaster", - instantiate: (di) => { - const broadcastMessage = di.inject(broadcastMessageInjectable); - - return debounce( - (items: CatalogEntity[]) => { - broadcastMessage(catalogItemsChannel, items); - }, - 100, - { - leading: true, - trailing: true, - }, - ); - }, -}); - -export default catalogSyncBroadcasterInjectable; diff --git a/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts index bdcd3034d3..f528a838a4 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts @@ -9,7 +9,7 @@ import { catalogInitChannel } from "../../common/ipc/catalog"; import { disposer, toJS } from "../../common/utils"; import { getStartableStoppable } from "../../common/utils/get-startable-stoppable"; import catalogEntityRegistryInjectable from "../catalog/entity-registry.injectable"; -import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; +import broadcastCurrentCatalogEntityRegistryStateInjectable from "../../features/catalog/entities-sync/main/broadcast.injectable"; const catalogSyncToRendererInjectable = getInjectable({ id: "catalog-sync-to-renderer", @@ -17,19 +17,19 @@ const catalogSyncToRendererInjectable = getInjectable({ instantiate: (di) => { const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); const ipcMain = di.inject(ipcMainInjectionToken); - const catalogSyncBroadcaster = di.inject(catalogSyncBroadcasterInjectable); + const broadcastCurrentCatalogEntityRegistryState = di.inject(broadcastCurrentCatalogEntityRegistryStateInjectable); return getStartableStoppable( "catalog-sync", () => { - const initChannelHandler = () => catalogSyncBroadcaster(toJS(catalogEntityRegistry.items)); + const initChannelHandler = () => broadcastCurrentCatalogEntityRegistryState(toJS(catalogEntityRegistry.items)); ipcMain.on(catalogInitChannel, initChannelHandler); return disposer( () => ipcMain.off(catalogInitChannel, initChannelHandler), reaction(() => toJS(catalogEntityRegistry.items), (items) => { - catalogSyncBroadcaster(items); + broadcastCurrentCatalogEntityRegistryState(items); }, { fireImmediately: true, }), diff --git a/packages/core/src/main/catalog-sync-to-renderer/push-catalog-to-renderer.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/push-catalog-to-renderer.injectable.ts index 647922fa53..c80a89cbfa 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/push-catalog-to-renderer.injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/push-catalog-to-renderer.injectable.ts @@ -4,16 +4,16 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { toJS } from "../../common/utils"; +import broadcastCurrentCatalogEntityRegistryStateInjectable from "../../features/catalog/entities-sync/main/broadcast.injectable"; import catalogEntityRegistryInjectable from "../catalog/entity-registry.injectable"; -import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; const pushCatalogToRendererInjectable = getInjectable({ id: "push-catalog-to-renderer", instantiate: (di) => { const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); - const catalogSyncBroadcaster = di.inject(catalogSyncBroadcasterInjectable); + const broadcastCurrentCatalogEntityRegistryState = di.inject(broadcastCurrentCatalogEntityRegistryStateInjectable); - return () => catalogSyncBroadcaster(toJS(catalogEntityRegistry.items)); + return () => broadcastCurrentCatalogEntityRegistryState(toJS(catalogEntityRegistry.items)); }, }); diff --git a/packages/core/src/renderer/api/catalog/entity/registry.ts b/packages/core/src/renderer/api/catalog/entity/registry.ts index 9971be8462..89dcf954c2 100644 --- a/packages/core/src/renderer/api/catalog/entity/registry.ts +++ b/packages/core/src/renderer/api/catalog/entity/registry.ts @@ -12,7 +12,7 @@ import type { Disposer } from "../../../utils"; import { once } from "lodash"; import { CatalogRunEvent } from "../../../../common/catalog/catalog-run-event"; import { ipcRenderer } from "electron"; -import { catalogInitChannel, catalogItemsChannel, catalogEntityRunListener } from "../../../../common/ipc/catalog"; +import { catalogInitChannel, catalogEntityRunListener } from "../../../../common/ipc/catalog"; import { isMainFrame } from "process"; import type { Navigate } from "../../../navigation/navigate.injectable"; import type { Logger } from "../../../../common/logger"; @@ -83,10 +83,6 @@ export class CatalogEntityRegistry { } init() { - ipcRendererOn(catalogItemsChannel, (event, items: (CatalogEntityData & CatalogEntityKindData)[]) => { - this.updateItems(items); - }); - // Make sure that we get items ASAP and not the next time one of them changes ipcRenderer.send(catalogInitChannel);