diff --git a/src/main/apis/app/theme/index.ts b/src/main/apis/app/theme/index.ts index 0dd2f908..faddd217 100644 --- a/src/main/apis/app/theme/index.ts +++ b/src/main/apis/app/theme/index.ts @@ -11,8 +11,6 @@ import { IWindowList } from '~/utils/enum' import windowManager from '../window/windowManager' -let insertedCSSKeyMain: string | undefined - export async function resolveThemes(): Promise<{ key: string; label: string }[]> { const files = fsWalk.walkSync(themesDir(), { followSymbolicLinks: true, @@ -74,13 +72,9 @@ export async function readTheme(theme: string): Promise { } export async function applyTheme(theme: string): Promise { - theme = path.basename(theme) - const css = await readTheme(theme) - try { - const window = windowManager.get(IWindowList.SETTING_WINDOW) - await window?.webContents.removeInsertedCSS(insertedCSSKeyMain || '') - insertedCSSKeyMain = await window?.webContents.insertCSS(css) - } catch (e) { - console.error(e) - } + const basePath = path.basename(theme) + const css = await readTheme(basePath) + windowManager.get(IWindowList.SETTING_WINDOW)?.webContents.send('THEME_UPDATE', css) + windowManager.get(IWindowList.UPDATE_WINDOW)?.webContents.send('THEME_UPDATE', css) + windowManager.get(IWindowList.TRAY_WINDOW)?.webContents.send('THEME_UPDATE', css) } diff --git a/src/main/lifeCycle/autoUpdater.ts b/src/main/lifeCycle/autoUpdater.ts index a783f5b4..fcf477f5 100644 --- a/src/main/lifeCycle/autoUpdater.ts +++ b/src/main/lifeCycle/autoUpdater.ts @@ -47,9 +47,9 @@ const updateAvailableHandler = async (info: updater.UpdateInfo) => { } windowManager.create(IWindowList.UPDATE_WINDOW) - const updateWindow = windowManager.get(IWindowList.UPDATE_WINDOW)! + const updateWindow = windowManager.get(IWindowList.UPDATE_WINDOW) - updateWindow.webContents.once('did-finish-load', () => { + updateWindow?.webContents.once('did-finish-load', () => { updateWindow.webContents.send('SHOW_UPDATE_INFO', { type: 'update-available', title: lang === II18nLanguage.ZH_CN ? '发现新版本' : 'New Update Available', @@ -58,7 +58,7 @@ const updateAvailableHandler = async (info: updater.UpdateInfo) => { }) }) - updateWindow.show() + updateWindow?.show() } const progressHandler = (progressObj: updater.ProgressInfo) => { diff --git a/src/preload/index.ts b/src/preload/index.ts index f8440c91..0a0b7f90 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -116,6 +116,16 @@ try { showFilePath(file: File) { return webUtils.getPathForFile(file) }, + onThemeUpdate: (callback: (css: string) => void) => { + const subscription = (_: any, css: string) => { + injectCSS(css) + callback(css) + } + ipcRenderer.on('THEME_UPDATE', subscription) + return () => { + ipcRenderer.removeListener('THEME_UPDATE', subscription) + } + }, }) contextBridge.exposeInMainWorld('node', { diff --git a/src/renderer/App.vue b/src/renderer/App.vue index f1949a61..34a7c851 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -1,5 +1,5 @@