diff --git a/src/index.ts b/src/index.ts index edbc2d10..03eac02b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -103,7 +103,7 @@ if (is.windows()) { ipcMain.handle('get-main-plugin-names', () => Object.keys(mainPlugins)); const initHook = (win: BrowserWindow) => { - ipcMain.handle('get-config', (_, id: keyof PluginBuilderList) => config.get(`plugins.${id}` as never) ?? pluginBuilders[id].config); + ipcMain.handle('get-config', (_, id: keyof PluginBuilderList) => deepmerge(pluginBuilders[id].config, config.get(`plugins.${id}`)) as PluginBuilderList[typeof id]['config']); ipcMain.handle('set-config', (_, name: string, obj: object) => config.setPartial(`plugins.${name}`, obj)); config.watch((newValue) => { @@ -148,7 +148,7 @@ async function loadPlugins(win: BrowserWindow) { Key extends keyof PluginBuilderList, Config extends PluginBaseConfig = PluginBuilderList[Key]['config'], >(name: Key): MainPluginContext => ({ - getConfig: () => config.get(`plugins.${name}`) as unknown as Config, + getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`)) as Config, setConfig: (newConfig) => { config.setPartial(`plugins.${name}`, newConfig); }, diff --git a/src/menu.ts b/src/menu.ts index 356ec8d4..82c0b2f8 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -2,6 +2,8 @@ import is from 'electron-is'; import { app, BrowserWindow, clipboard, dialog, Menu } from 'electron'; import prompt from 'custom-electron-prompt'; +import { deepmerge as createDeepmerge } from '@fastify/deepmerge'; + import { restart } from './providers/app-controls'; import config from './config'; import { startingPages } from './providers/extracted-data'; @@ -22,6 +24,8 @@ const inAppMenuActive = config.plugins.isEnabled('in-app-menu'); const betaPlugins = ['crossfade', 'lumiastream']; +const deepmerge = createDeepmerge(); + const pluginEnabledMenu = (plugin: string, label = '', hasSubmenu = false, refreshMenu: (() => void ) | undefined = undefined): Electron.MenuItemConstructorOptions => ({ label: label || plugin, type: 'checkbox', @@ -52,7 +56,7 @@ export const mainMenuTemplate = async (win: BrowserWindow): Promise(name: Key): MenuPluginContext => ({ - getConfig: () => config.get(`plugins.${name}`) as unknown as Config, + getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`)) as Config, setConfig: (newConfig) => { config.setPartial(`plugins.${name}`, newConfig); }, diff --git a/src/preload.ts b/src/preload.ts index 861dabe5..60c800d0 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -17,7 +17,7 @@ const createContext = < Key extends keyof PluginBuilderList, Config extends PluginBaseConfig = PluginBuilderList[Key]['config'], >(name: Key): PluginContext => ({ - getConfig: () => config.get(`plugins.${name}`) as unknown as Config, + getConfig: () => deepmerge(pluginBuilders[name].config, config.get(`plugins.${name}`)) as Config, setConfig: (newConfig) => { config.setPartial(`plugins.${name}`, newConfig); },