From b0e2660dfa607f910b4e3b33e740dd6cb61c3cd7 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 17 Feb 2023 10:18:42 -0500 Subject: [PATCH] Convert request catalog entity reg state to injectable Signed-off-by: Sebastian Malton --- packages/core/src/common/ipc/catalog.ts | 5 ---- .../catalog/entities-sync/common/channel.ts | 4 +++ .../main/handle-request-state.injectable.ts | 22 ++++++++++++++++ .../catalog/entities-sync/renderer/init.ts | 25 +++++++++++++++++++ .../catalog-sync-to-renderer.injectable.ts | 24 +++++------------- .../renderer/api/catalog/entity/registry.ts | 6 +---- 6 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 packages/core/src/features/catalog/entities-sync/main/handle-request-state.injectable.ts create mode 100644 packages/core/src/features/catalog/entities-sync/renderer/init.ts diff --git a/packages/core/src/common/ipc/catalog.ts b/packages/core/src/common/ipc/catalog.ts index 38780cbd2c..50d9a46704 100644 --- a/packages/core/src/common/ipc/catalog.ts +++ b/packages/core/src/common/ipc/catalog.ts @@ -7,8 +7,3 @@ * This is used to activate a specific entity in the renderer main frame */ export const catalogEntityRunListener = "catalog-entity:run"; - -/** - * This can be sent from renderer to main to initialize a broadcast of ITEMS - */ -export const catalogInitChannel = "catalog:init"; diff --git a/packages/core/src/features/catalog/entities-sync/common/channel.ts b/packages/core/src/features/catalog/entities-sync/common/channel.ts index b902237311..e8b5fc55f8 100644 --- a/packages/core/src/features/catalog/entities-sync/common/channel.ts +++ b/packages/core/src/features/catalog/entities-sync/common/channel.ts @@ -9,3 +9,7 @@ import type { MessageChannel } from "../../../../common/utils/channel/message-ch export const currentCatalogEntityRegistryStateChannel: MessageChannel<(CatalogEntityData & CatalogEntityKindData)[]> = { id: "current-catalog-entity-registry-state", }; + +export const requestCatalogEntityRegistryStateToBeSentChannel: MessageChannel = { + id: "request-catalog-entity-registry-state-to-be-sent", +}; diff --git a/packages/core/src/features/catalog/entities-sync/main/handle-request-state.injectable.ts b/packages/core/src/features/catalog/entities-sync/main/handle-request-state.injectable.ts new file mode 100644 index 0000000000..99d9dcc9ba --- /dev/null +++ b/packages/core/src/features/catalog/entities-sync/main/handle-request-state.injectable.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { toJS } from "../../../../common/utils"; +import { getMessageChannelListenerInjectable } from "../../../../common/utils/channel/message-channel-listener-injection-token"; +import catalogEntityRegistryInjectable from "../../../../main/catalog/entity-registry.injectable"; +import { requestCatalogEntityRegistryStateToBeSentChannel } from "../common/channel"; +import broadcastCurrentCatalogEntityRegistryStateInjectable from "./broadcast.injectable"; + +const requestForCurrentCatalogEntityStateToBeSentListenerInjectable = getMessageChannelListenerInjectable({ + id: "main", + channel: requestCatalogEntityRegistryStateToBeSentChannel, + handler: (di) => { + const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); + const broadcastCurrentCatalogEntityRegistryState = di.inject(broadcastCurrentCatalogEntityRegistryStateInjectable); + + return () => broadcastCurrentCatalogEntityRegistryState(toJS(catalogEntityRegistry.items)); + }, +}); + +export default requestForCurrentCatalogEntityStateToBeSentListenerInjectable; diff --git a/packages/core/src/features/catalog/entities-sync/renderer/init.ts b/packages/core/src/features/catalog/entities-sync/renderer/init.ts new file mode 100644 index 0000000000..cc12723e51 --- /dev/null +++ b/packages/core/src/features/catalog/entities-sync/renderer/init.ts @@ -0,0 +1,25 @@ +/** + * 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 { sendMessageToChannelInjectionToken } from "../../../../common/utils/channel/message-to-channel-injection-token"; +import { beforeFrameStartsSecondInjectionToken } from "../../../../renderer/before-frame-starts/tokens"; +import { requestCatalogEntityRegistryStateToBeSentChannel } from "../common/channel"; +import startListeningOfChannelsInjectable from "../../../../renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable"; + +const requestCatalogEntityRegistryStateToBeSentInjectable = getInjectable({ + id: "request-catalog-entity-registry-state-to-be-sent", + instantiate: (di) => ({ + id: "request-catalog-entity-registry-state-to-be-sent", + run: () => { + const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken); + + sendMessageToChannel(requestCatalogEntityRegistryStateToBeSentChannel); + }, + runAfter: di.inject(startListeningOfChannelsInjectable), + }), + injectionToken: beforeFrameStartsSecondInjectionToken, +}); + +export default requestCatalogEntityRegistryStateToBeSentInjectable; 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 f528a838a4..b4862e743c 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 @@ -4,9 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { reaction } from "mobx"; -import ipcMainInjectionToken from "../../common/ipc/ipc-main-injection-token"; -import { catalogInitChannel } from "../../common/ipc/catalog"; -import { disposer, toJS } from "../../common/utils"; +import { toJS } from "../../common/utils"; import { getStartableStoppable } from "../../common/utils/get-startable-stoppable"; import catalogEntityRegistryInjectable from "../catalog/entity-registry.injectable"; import broadcastCurrentCatalogEntityRegistryStateInjectable from "../../features/catalog/entities-sync/main/broadcast.injectable"; @@ -16,25 +14,15 @@ const catalogSyncToRendererInjectable = getInjectable({ instantiate: (di) => { const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); - const ipcMain = di.inject(ipcMainInjectionToken); const broadcastCurrentCatalogEntityRegistryState = di.inject(broadcastCurrentCatalogEntityRegistryStateInjectable); return getStartableStoppable( "catalog-sync", - () => { - const initChannelHandler = () => broadcastCurrentCatalogEntityRegistryState(toJS(catalogEntityRegistry.items)); - - ipcMain.on(catalogInitChannel, initChannelHandler); - - return disposer( - () => ipcMain.off(catalogInitChannel, initChannelHandler), - reaction(() => toJS(catalogEntityRegistry.items), (items) => { - broadcastCurrentCatalogEntityRegistryState(items); - }, { - fireImmediately: true, - }), - ); - }, + () => reaction(() => toJS(catalogEntityRegistry.items), (items) => { + broadcastCurrentCatalogEntityRegistryState(items); + }, { + fireImmediately: true, + }), ); }, }); diff --git a/packages/core/src/renderer/api/catalog/entity/registry.ts b/packages/core/src/renderer/api/catalog/entity/registry.ts index 89dcf954c2..fe3820ad07 100644 --- a/packages/core/src/renderer/api/catalog/entity/registry.ts +++ b/packages/core/src/renderer/api/catalog/entity/registry.ts @@ -11,8 +11,7 @@ import { iter } from "../../../utils"; import type { Disposer } from "../../../utils"; import { once } from "lodash"; import { CatalogRunEvent } from "../../../../common/catalog/catalog-run-event"; -import { ipcRenderer } from "electron"; -import { catalogInitChannel, catalogEntityRunListener } from "../../../../common/ipc/catalog"; +import { catalogEntityRunListener } from "../../../../common/ipc/catalog"; import { isMainFrame } from "process"; import type { Navigate } from "../../../navigation/navigate.injectable"; import type { Logger } from "../../../../common/logger"; @@ -83,9 +82,6 @@ export class CatalogEntityRegistry { } init() { - // Make sure that we get items ASAP and not the next time one of them changes - ipcRenderer.send(catalogInitChannel); - if (isMainFrame) { ipcRendererOn(catalogEntityRunListener, (event, id: string) => { const entity = this.getById(id);