feat: 完善 store 通信

This commit is contained in:
imsyy
2025-10-29 23:59:13 +08:00
parent 2bc4fca4dd
commit 6937a93d17
7 changed files with 59 additions and 12 deletions

2
.gitignore vendored
View File

@@ -16,7 +16,7 @@ coverage
out
.env
auto-imports.d.ts
# components.d.ts
components.d.ts
# Editor directories and files
.vscode/*

View File

@@ -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

View File

@@ -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;

View File

@@ -29,8 +29,6 @@ export const createWindow = (
// 启用 Node.js
nodeIntegration: true,
nodeIntegrationInWorker: true,
// 启用上下文隔离
contextIsolation: false,
},
};
// 合并参数

View File

@@ -78,7 +78,6 @@ class LoginWindow {
spellcheck: false,
nodeIntegration: true,
nodeIntegrationInWorker: true,
contextIsolation: false,
session: loginSession,
},
});

View File

@@ -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<K extends keyof StoreType>(key: K): Promise<StoreType[K]>;
set<K extends keyof StoreType>(key: K, value: StoreType[K]): Promise<boolean>;
has(key: keyof StoreType): Promise<boolean>;
delete(key: keyof StoreType): Promise<boolean>;
reset(keys?: (keyof StoreType)[]): Promise<boolean>;
};
};
}
}

View File

@@ -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;
}