From 6937a93d175f33acea120204dd559909bc6437f5 Mon Sep 17 00:00:00 2001 From: imsyy Date: Wed, 29 Oct 2025 23:59:13 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=AE=8C=E5=96=84=20store?= =?UTF-8?q?=20=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- electron/main/ipc/ipc-lyric.ts | 6 ++--- electron/main/ipc/ipc-store.ts | 34 +++++++++++++++++++++++++++ electron/main/windows/index.ts | 2 -- electron/main/windows/login-window.ts | 1 - electron/preload/index.d.ts | 11 ++++++++- electron/preload/index.ts | 15 ++++++++---- 7 files changed, 59 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 0f79126..db89015 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ coverage out .env auto-imports.d.ts -# components.d.ts +components.d.ts # Editor directories and files .vscode/* diff --git a/electron/main/ipc/ipc-lyric.ts b/electron/main/ipc/ipc-lyric.ts index e264465..5cc0ee0 100644 --- a/electron/main/ipc/ipc-lyric.ts +++ b/electron/main/ipc/ipc-lyric.ts @@ -1,8 +1,8 @@ import { ipcMain, screen } from "electron"; -import lyricWindow from "../windows/lyric-window"; -import { useStore } from "../store"; -import mainWindow from "../windows/main-window"; import { isAbsolute, relative, resolve } from "path"; +import { useStore } from "../store"; +import lyricWindow from "../windows/lyric-window"; +import mainWindow from "../windows/main-window"; /** * 歌词相关 IPC diff --git a/electron/main/ipc/ipc-store.ts b/electron/main/ipc/ipc-store.ts index fa7fdbf..f42790f 100644 --- a/electron/main/ipc/ipc-store.ts +++ b/electron/main/ipc/ipc-store.ts @@ -1,4 +1,6 @@ +import { ipcMain } from "electron"; import { useStore } from "../store"; +import type { StoreType } from "../store"; /** * 初始化 store IPC 主进程 @@ -6,6 +8,38 @@ import { useStore } from "../store"; const initStoreIpc = (): void => { const store = useStore(); if (!store) return; + + // 获取配置项 + ipcMain.handle("store-get", (_event, key: keyof StoreType) => { + return store.get(key as any); + }); + + // 设置配置项 + ipcMain.handle("store-set", (_event, key: keyof StoreType, value: unknown) => { + store.set(key as any, value as any); + return true; + }); + + // 判断配置项是否存在 + ipcMain.handle("store-has", (_event, key: keyof StoreType) => { + return store.has(key as any); + }); + + // 删除配置项 + ipcMain.handle("store-delete", (_event, key: keyof StoreType) => { + store.delete(key as any); + return true; + }); + + // 重置配置(支持指定 keys 或全部重置) + ipcMain.handle("store-reset", (_event, keys?: (keyof StoreType)[]) => { + if (keys && keys.length > 0) { + store.reset(...(keys as any)); + } else { + store.reset(); + } + return true; + }); }; export default initStoreIpc; diff --git a/electron/main/windows/index.ts b/electron/main/windows/index.ts index 49cc924..5790c23 100644 --- a/electron/main/windows/index.ts +++ b/electron/main/windows/index.ts @@ -29,8 +29,6 @@ export const createWindow = ( // 启用 Node.js nodeIntegration: true, nodeIntegrationInWorker: true, - // 启用上下文隔离 - contextIsolation: false, }, }; // 合并参数 diff --git a/electron/main/windows/login-window.ts b/electron/main/windows/login-window.ts index 75c7a9c..51afcbb 100644 --- a/electron/main/windows/login-window.ts +++ b/electron/main/windows/login-window.ts @@ -78,7 +78,6 @@ class LoginWindow { spellcheck: false, nodeIntegration: true, nodeIntegrationInWorker: true, - contextIsolation: false, session: loginSession, }, }); diff --git a/electron/preload/index.d.ts b/electron/preload/index.d.ts index ab1657a..8a52b40 100644 --- a/electron/preload/index.d.ts +++ b/electron/preload/index.d.ts @@ -1,8 +1,17 @@ import { ElectronAPI } from "@electron-toolkit/preload"; +import type { StoreType } from "../main/store"; declare global { interface Window { electron: ElectronAPI; - api: unknown; + api: { + store: { + get(key: K): Promise; + set(key: K, value: StoreType[K]): Promise; + has(key: keyof StoreType): Promise; + delete(key: keyof StoreType): Promise; + reset(keys?: (keyof StoreType)[]): Promise; + }; + }; } } diff --git a/electron/preload/index.ts b/electron/preload/index.ts index 5e4ca2a..89fb213 100644 --- a/electron/preload/index.ts +++ b/electron/preload/index.ts @@ -1,4 +1,4 @@ -import { contextBridge } from "electron"; +import { contextBridge, ipcRenderer } from "electron"; import { electronAPI } from "@electron-toolkit/preload"; // Use `contextBridge` APIs to expose Electron APIs to @@ -7,10 +7,17 @@ import { electronAPI } from "@electron-toolkit/preload"; if (process.contextIsolated) { try { contextBridge.exposeInMainWorld("electron", electronAPI); + // Expose store API via preload + contextBridge.exposeInMainWorld("api", { + store: { + get: (key: string) => ipcRenderer.invoke("store-get", key), + set: (key: string, value: unknown) => ipcRenderer.invoke("store-set", key, value), + has: (key: string) => ipcRenderer.invoke("store-has", key), + delete: (key: string) => ipcRenderer.invoke("store-delete", key), + reset: (keys?: string[]) => ipcRenderer.invoke("store-reset", keys), + }, + }); } catch (error) { console.error(error); } -} else { - // @ts-expect-error (define in dts) - window.electron = electronAPI; }