From 5f82cc50e44ffc8a88633b68b8fa318e1a873b13 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Tue, 23 May 2023 10:32:28 +0300 Subject: [PATCH] Co-authored-by: Mikko Aspiala WIPWIP Signed-off-by: Janne Savolainen Signed-off-by: Janne Savolainen --- .../persistent-storage/create.injectable.ts | 75 ++++++++++--------- ...message-broadcaster-listener.injectable.ts | 1 - .../get-message-bridge-fake.ts | 2 +- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/packages/core/src/common/persistent-storage/create.injectable.ts b/packages/core/src/common/persistent-storage/create.injectable.ts index 1f3d158e90..dd1a166ca7 100644 --- a/packages/core/src/common/persistent-storage/create.injectable.ts +++ b/packages/core/src/common/persistent-storage/create.injectable.ts @@ -7,18 +7,15 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Options } from "conf/dist/source"; import { isEqual, kebabCase } from "lodash"; import type { IEqualsComparer } from "mobx"; -import { reaction } from "mobx"; +import { action, runInAction, reaction } from "mobx"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; import { loggerInjectionToken } from "@k8slens/logger"; import getBasenameOfPathInjectable from "../path/get-basename.injectable"; -import { enlistMessageChannelListenerInjectionToken, sendMessageToChannelInjectionToken } from "@k8slens/messaging"; +import { sendMessageToChannelInjectionToken, getMessageChannelListenerInjectable } from "@k8slens/messaging"; import type { MessageChannel } from "@k8slens/messaging"; -import { persistentStorageIpcChannelPrefixesInjectionToken } from "./channel-prefix"; -import { shouldPersistentStorageDisableSyncInIpcListenerInjectionToken } from "./disable-sync"; import { persistStateToConfigInjectionToken } from "./save-to-file"; import type { Migrations } from "./migrations.injectable"; -import { nextTick } from "process"; export interface PersistentStorage { /** @@ -65,10 +62,8 @@ const createPersistentStorageInjectable = getInjectable({ const getConfigurationFileModel = di.inject(getConfigurationFileModelInjectable); const logger = di.inject(loggerInjectionToken); const getBasenameOfPath = di.inject(getBasenameOfPathInjectable); - const ipcChannelPrefixes = di.inject(persistentStorageIpcChannelPrefixesInjectionToken); const persistStateToConfig = di.inject(persistStateToConfigInjectionToken); - const enlistMessageChannelListener = di.inject(enlistMessageChannelListenerInjectionToken); - const shouldDisableSyncInListener = di.inject(shouldPersistentStorageDisableSyncInIpcListenerInjectionToken); + // const shouldDisableSyncInListener = di.inject(shouldPersistentStorageDisableSyncInIpcListenerInjectionToken); const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken); return (rawParams: PersistentStorageParams) => { @@ -101,47 +96,53 @@ const createPersistentStorageInjectable = getInjectable({ logger.info(`[${displayName}]: LOADED from ${config.path}`); const syncDisposers = disposer(); - const sendChannel: MessageChannel = { - id: `${ipcChannelPrefixes.remote}:${config.path}`, - }; - const receiveChannel: MessageChannel = { - id: `${ipcChannelPrefixes.local}:${config.path}`, + + const targetChannel: MessageChannel = { + id: config.path, }; + const name = getBasenameOfPath(config.path); - const disableSync = () => syncDisposers(); + // const disableSync = () => syncDisposers(); const enableSync = () => { + const mikkoInjectable = getMessageChannelListenerInjectable({ + id: `persistent-storage-sync-${displayName}`, + channel: targetChannel, + getHandler: () => (model) => { + logger.silly(`[${displayName}]: syncing ${name}`, { model }); + + // if (shouldDisableSyncInListener) { + // disableSync(); + // } + + // todo: use "resourceVersion" if merge required (to avoid equality checks => better performance) + if (!isEqual(toJSON(), model)) { + fromStore(model); + } + + // if (shouldDisableSyncInListener) { + // nextTick(() => { + // enableSync(); + // }); + // } + }, + }); + + runInAction(() => { + di.register(mikkoInjectable); + }); + syncDisposers.push( reaction( () => toJSON(), - model => { + (model) => { persistStateToConfig(config, model); - sendMessageToChannel(sendChannel, model); + sendMessageToChannel(targetChannel, model); }, syncOptions, ), - enlistMessageChannelListener({ - id: "persistent-storage-sync", - channel: receiveChannel, - handler: (model) => { - logger.silly(`[${displayName}]: syncing ${name}`, { model }); - if (shouldDisableSyncInListener) { - disableSync(); - } - - // todo: use "resourceVersion" if merge required (to avoid equality checks => better performance) - if (!isEqual(toJSON(), model)) { - fromStore(model); - } - - if (shouldDisableSyncInListener) { - nextTick(() => { - enableSync(); - }); - } - }, - }), + action(() => di.deregister(mikkoInjectable)), ); }; diff --git a/packages/technical-features/messaging/electron/main/src/message-broadcaster-listener/message-broadcaster-listener.injectable.ts b/packages/technical-features/messaging/electron/main/src/message-broadcaster-listener/message-broadcaster-listener.injectable.ts index 146e72c91b..619ead67a0 100644 --- a/packages/technical-features/messaging/electron/main/src/message-broadcaster-listener/message-broadcaster-listener.injectable.ts +++ b/packages/technical-features/messaging/electron/main/src/message-broadcaster-listener/message-broadcaster-listener.injectable.ts @@ -13,7 +13,6 @@ export const messageBroadcasterListenerInjectable = getMessageChannelListenerInj const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken); return ({ targetChannelId, message }, extraData) => { - console.log("mikkomikko", { targetChannelId, message }); sendMessageToChannel({ id: targetChannelId }, message, extraData); }; }, diff --git a/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts b/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts index 3e7efea5f9..fe9cd95d79 100644 --- a/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts +++ b/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts @@ -47,7 +47,7 @@ const overrideMessaging = ({ messageListenersByDi.set(di, messageHandlersByChannel); di.override(sendMessageToChannelInjectionToken, () => (channel, message) => { - const allOtherDis = [...messageListenersByDi.keys()].filter((x) => x !== di); + const allOtherDis = [...messageListenersByDi.keys()]; //.filter((x) => x !== di); allOtherDis.forEach((otherDi) => { const listeners = messageListenersByDi.get(otherDi);