From aec860af33d323285caaace401f894945f391865 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 9 Dec 2022 15:10:54 -0500 Subject: [PATCH] Fix BaseStore sync Signed-off-by: Sebastian Malton --- src/common/base-store/base-store.ts | 12 ++++++++---- src/common/base-store/channel-prefix.ts | 3 ++- src/common/cluster-store/cluster-store.injectable.ts | 4 ++-- src/common/hotbars/store.injectable.ts | 4 ++-- src/common/user-store/user-store.injectable.ts | 4 ++-- .../weblinks-store/weblink-store.injectable.ts | 4 ++-- .../file-system-provisioner-store.injectable.ts | 4 ++-- src/extensions/extension-store.ts | 4 ++-- .../extensions-store/extensions-store.injectable.ts | 4 ++-- src/main/base-store/ipc-channel-prefix.injectable.ts | 9 ++++++--- .../base-store/ipc-channel-prefix.injectable.ts | 9 ++++++--- 11 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/common/base-store/base-store.ts b/src/common/base-store/base-store.ts index f8ba209ed6..9a786329e4 100644 --- a/src/common/base-store/base-store.ts +++ b/src/common/base-store/base-store.ts @@ -25,12 +25,17 @@ export interface BaseStoreParams extends Omit, "migrations"> { configName: string; } +export interface IpcChannelPrefixes { + local: string; + remote: string; +} + export interface BaseStoreDependencies { readonly logger: Logger; readonly storeMigrationVersion: string; readonly directoryForUserData: string; readonly migrations: Migrations>; - readonly ipcChannelPrefix: string; + readonly ipcChannelPrefixes: IpcChannelPrefixes; readonly shouldDisableSyncInListener: boolean; getConfigurationFileModel: GetConfigurationFileModel; persistStateToConfig: PersistStateToConfig; @@ -83,7 +88,6 @@ export abstract class BaseStore { private startSyncing(config: Config) { const name = this.dependencies.getBasenameOfPath(config.path); - const channelName = `${this.dependencies.ipcChannelPrefix}:${config.path}`; const disableSync = () => this.syncDisposers(); const enableSync = () => { @@ -92,13 +96,13 @@ export abstract class BaseStore { () => toJS(this.toJSON()), // unwrap possible observables and react to everything model => { this.dependencies.persistStateToConfig(config, model); - broadcastMessage(channelName, model); + broadcastMessage(`${this.dependencies.ipcChannelPrefixes.remote}:${config.path}`, model); }, this.params.syncOptions, ), this.dependencies.enlistMessageChannelListener({ channel: { - id: channelName, + id: `${this.dependencies.ipcChannelPrefixes.local}:${config.path}`, }, handler: (model) => { this.dependencies.logger.silly(`[${this.displayName}]: syncing ${name}`, { model }); diff --git a/src/common/base-store/channel-prefix.ts b/src/common/base-store/channel-prefix.ts index 8d54e2b624..f2662c65e0 100644 --- a/src/common/base-store/channel-prefix.ts +++ b/src/common/base-store/channel-prefix.ts @@ -4,7 +4,8 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; +import type { IpcChannelPrefixes } from "./base-store"; -export const baseStoreIpcChannelPrefixInjectionToken = getInjectionToken({ +export const baseStoreIpcChannelPrefixesInjectionToken = getInjectionToken({ id: "base-store-ipc-channel-prefix-token", }); diff --git a/src/common/cluster-store/cluster-store.injectable.ts b/src/common/cluster-store/cluster-store.injectable.ts index d6948bd410..9712e3fdb0 100644 --- a/src/common/cluster-store/cluster-store.injectable.ts +++ b/src/common/cluster-store/cluster-store.injectable.ts @@ -13,7 +13,7 @@ import loggerInjectable from "../logger.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable"; import storeMigrationsInjectable from "../base-store/migrations.injectable"; import { clusterStoreMigrationInjectionToken } from "./migration-token"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../base-store/channel-prefix"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../base-store/disable-sync"; import { persistStateToConfigInjectionToken } from "../base-store/save-to-file"; import getBasenameOfPathInjectable from "../path/get-basename.injectable"; @@ -32,7 +32,7 @@ const clusterStoreInjectable = getInjectable({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: di.inject(storeMigrationsInjectable, clusterStoreMigrationInjectionToken), getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/common/hotbars/store.injectable.ts b/src/common/hotbars/store.injectable.ts index c85446c23c..cc15f93bf8 100644 --- a/src/common/hotbars/store.injectable.ts +++ b/src/common/hotbars/store.injectable.ts @@ -12,7 +12,7 @@ import storeMigrationVersionInjectable from "../vars/store-migration-version.inj import storeMigrationsInjectable from "../base-store/migrations.injectable"; import { hotbarStoreMigrationInjectionToken } from "./migrations-token"; import getBasenameOfPathInjectable from "../path/get-basename.injectable"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../base-store/channel-prefix"; import { persistStateToConfigInjectionToken } from "../base-store/save-to-file"; import { enlistMessageChannelListenerInjectionToken } from "../utils/channel/enlist-message-channel-listener-injection-token"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../base-store/disable-sync"; @@ -28,7 +28,7 @@ const hotbarStoreInjectable = getInjectable({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: di.inject(storeMigrationsInjectable, hotbarStoreMigrationInjectionToken), getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/common/user-store/user-store.injectable.ts b/src/common/user-store/user-store.injectable.ts index 49a264f0e4..3b45b03b1d 100644 --- a/src/common/user-store/user-store.injectable.ts +++ b/src/common/user-store/user-store.injectable.ts @@ -12,7 +12,7 @@ import loggerInjectable from "../logger.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable"; import storeMigrationsInjectable from "../base-store/migrations.injectable"; import { userStoreMigrationInjectionToken } from "./migrations-token"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../base-store/channel-prefix"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../base-store/disable-sync"; import { persistStateToConfigInjectionToken } from "../base-store/save-to-file"; import getBasenameOfPathInjectable from "../path/get-basename.injectable"; @@ -31,7 +31,7 @@ const userStoreInjectable = getInjectable({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: di.inject(storeMigrationsInjectable, userStoreMigrationInjectionToken), getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/common/weblinks-store/weblink-store.injectable.ts b/src/common/weblinks-store/weblink-store.injectable.ts index f46e5eef2a..cf793a2e58 100644 --- a/src/common/weblinks-store/weblink-store.injectable.ts +++ b/src/common/weblinks-store/weblink-store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../base-store/channel-prefix"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../base-store/disable-sync"; import storeMigrationsInjectable from "../base-store/migrations.injectable"; import { persistStateToConfigInjectionToken } from "../base-store/save-to-file"; @@ -25,7 +25,7 @@ const weblinkStoreInjectable = getInjectable({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: di.inject(storeMigrationsInjectable, weblinkStoreMigrationInjectionToken), getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts b/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts index 5508124621..b511437da9 100644 --- a/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts +++ b/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable.ts @@ -12,7 +12,7 @@ import directoryForUserDataInjectable from "../../../common/app-paths/directory- import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import storeMigrationVersionInjectable from "../../../common/vars/store-migration-version.injectable"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../../../common/base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../../../common/base-store/channel-prefix"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../../../common/base-store/disable-sync"; import { persistStateToConfigInjectionToken } from "../../../common/base-store/save-to-file"; import getBasenameOfPathInjectable from "../../../common/path/get-basename.injectable"; @@ -32,7 +32,7 @@ const fileSystemProvisionerStoreInjectable = getInjectable({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: {}, getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/extensions/extension-store.ts b/src/extensions/extension-store.ts index ef518afbfa..bda3c09c10 100644 --- a/src/extensions/extension-store.ts +++ b/src/extensions/extension-store.ts @@ -16,7 +16,7 @@ import getConfigurationFileModelInjectable from "../common/get-configuration-fil import loggerInjectable from "../common/logger.injectable"; import storeMigrationVersionInjectable from "../common/vars/store-migration-version.injectable"; import type { Migrations } from "conf/dist/source/types"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../common/base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../common/base-store/channel-prefix"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../common/base-store/disable-sync"; import { persistStateToConfigInjectionToken } from "../common/base-store/save-to-file"; import getBasenameOfPathInjectable from "../common/path/get-basename.injectable"; @@ -59,7 +59,7 @@ export abstract class ExtensionStore extends BaseStore { storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: migrations as Migrations>, getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/extensions/extensions-store/extensions-store.injectable.ts b/src/extensions/extensions-store/extensions-store.injectable.ts index b271b2b1cc..9f5ff83270 100644 --- a/src/extensions/extensions-store/extensions-store.injectable.ts +++ b/src/extensions/extensions-store/extensions-store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../../common/base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../../common/base-store/channel-prefix"; import { shouldBaseStoreDisableSyncInIpcListenerInjectionToken } from "../../common/base-store/disable-sync"; import { persistStateToConfigInjectionToken } from "../../common/base-store/save-to-file"; import getConfigurationFileModelInjectable from "../../common/get-configuration-file-model/get-configuration-file-model.injectable"; @@ -23,7 +23,7 @@ const extensionsStoreInjectable = getInjectable({ storeMigrationVersion: di.inject(storeMigrationVersionInjectable), migrations: {}, getBasenameOfPath: di.inject(getBasenameOfPathInjectable), - ipcChannelPrefix: di.inject(baseStoreIpcChannelPrefixInjectionToken), + ipcChannelPrefixes: di.inject(baseStoreIpcChannelPrefixesInjectionToken), persistStateToConfig: di.inject(persistStateToConfigInjectionToken), enlistMessageChannelListener: di.inject(enlistMessageChannelListenerInjectionToken), shouldDisableSyncInListener: di.inject(shouldBaseStoreDisableSyncInIpcListenerInjectionToken), diff --git a/src/main/base-store/ipc-channel-prefix.injectable.ts b/src/main/base-store/ipc-channel-prefix.injectable.ts index f4586a234b..635f857fc4 100644 --- a/src/main/base-store/ipc-channel-prefix.injectable.ts +++ b/src/main/base-store/ipc-channel-prefix.injectable.ts @@ -3,12 +3,15 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../../common/base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../../common/base-store/channel-prefix"; const baseStoreIpcChannelPrefixInjectable = getInjectable({ id: "base-store-ipc-channel-prefix", - instantiate: () => "store-sync-main", - injectionToken: baseStoreIpcChannelPrefixInjectionToken, + instantiate: () => ({ + local: "store-sync-main", + remote: "store-sync-renderer", + }), + injectionToken: baseStoreIpcChannelPrefixesInjectionToken, }); export default baseStoreIpcChannelPrefixInjectable; diff --git a/src/renderer/base-store/ipc-channel-prefix.injectable.ts b/src/renderer/base-store/ipc-channel-prefix.injectable.ts index 9edb925fc1..bb2d407720 100644 --- a/src/renderer/base-store/ipc-channel-prefix.injectable.ts +++ b/src/renderer/base-store/ipc-channel-prefix.injectable.ts @@ -3,12 +3,15 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { baseStoreIpcChannelPrefixInjectionToken } from "../../common/base-store/channel-prefix"; +import { baseStoreIpcChannelPrefixesInjectionToken } from "../../common/base-store/channel-prefix"; const baseStoreIpcChannelPrefixInjectable = getInjectable({ id: "base-store-ipc-channel-prefix", - instantiate: () => "store-sync-renderer", - injectionToken: baseStoreIpcChannelPrefixInjectionToken, + instantiate: () => ({ + local: "store-sync-renderer", + remote: "store-sync-main", + }), + injectionToken: baseStoreIpcChannelPrefixesInjectionToken, }); export default baseStoreIpcChannelPrefixInjectable;