Skip to content

Commit 6937a93

Browse files
committed
✨ feat: 完善 store 通信
1 parent 2bc4fca commit 6937a93

7 files changed

Lines changed: 58 additions & 11 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ coverage
1616
out
1717
.env
1818
auto-imports.d.ts
19-
# components.d.ts
19+
components.d.ts
2020

2121
# Editor directories and files
2222
.vscode/*

electron/main/ipc/ipc-lyric.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { ipcMain, screen } from "electron";
2-
import lyricWindow from "../windows/lyric-window";
2+
import { isAbsolute, relative, resolve } from "path";
33
import { useStore } from "../store";
4+
import lyricWindow from "../windows/lyric-window";
45
import mainWindow from "../windows/main-window";
5-
import { isAbsolute, relative, resolve } from "path";
66

77
/**
88
* 歌词相关 IPC

electron/main/ipc/ipc-store.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,45 @@
1+
import { ipcMain } from "electron";
12
import { useStore } from "../store";
3+
import type { StoreType } from "../store";
24

35
/**
46
* 初始化 store IPC 主进程
57
*/
68
const initStoreIpc = (): void => {
79
const store = useStore();
810
if (!store) return;
11+
12+
// 获取配置项
13+
ipcMain.handle("store-get", (_event, key: keyof StoreType) => {
14+
return store.get(key as any);
15+
});
16+
17+
// 设置配置项
18+
ipcMain.handle("store-set", (_event, key: keyof StoreType, value: unknown) => {
19+
store.set(key as any, value as any);
20+
return true;
21+
});
22+
23+
// 判断配置项是否存在
24+
ipcMain.handle("store-has", (_event, key: keyof StoreType) => {
25+
return store.has(key as any);
26+
});
27+
28+
// 删除配置项
29+
ipcMain.handle("store-delete", (_event, key: keyof StoreType) => {
30+
store.delete(key as any);
31+
return true;
32+
});
33+
34+
// 重置配置(支持指定 keys 或全部重置)
35+
ipcMain.handle("store-reset", (_event, keys?: (keyof StoreType)[]) => {
36+
if (keys && keys.length > 0) {
37+
store.reset(...(keys as any));
38+
} else {
39+
store.reset();
40+
}
41+
return true;
42+
});
943
};
1044

1145
export default initStoreIpc;

electron/main/windows/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ export const createWindow = (
2929
// 启用 Node.js
3030
nodeIntegration: true,
3131
nodeIntegrationInWorker: true,
32-
// 启用上下文隔离
33-
contextIsolation: false,
3432
},
3533
};
3634
// 合并参数

electron/main/windows/login-window.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ class LoginWindow {
7878
spellcheck: false,
7979
nodeIntegration: true,
8080
nodeIntegrationInWorker: true,
81-
contextIsolation: false,
8281
session: loginSession,
8382
},
8483
});

electron/preload/index.d.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
import { ElectronAPI } from "@electron-toolkit/preload";
2+
import type { StoreType } from "../main/store";
23

34
declare global {
45
interface Window {
56
electron: ElectronAPI;
6-
api: unknown;
7+
api: {
8+
store: {
9+
get<K extends keyof StoreType>(key: K): Promise<StoreType[K]>;
10+
set<K extends keyof StoreType>(key: K, value: StoreType[K]): Promise<boolean>;
11+
has(key: keyof StoreType): Promise<boolean>;
12+
delete(key: keyof StoreType): Promise<boolean>;
13+
reset(keys?: (keyof StoreType)[]): Promise<boolean>;
14+
};
15+
};
716
}
817
}

electron/preload/index.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { contextBridge } from "electron";
1+
import { contextBridge, ipcRenderer } from "electron";
22
import { electronAPI } from "@electron-toolkit/preload";
33

44
// Use `contextBridge` APIs to expose Electron APIs to
@@ -7,10 +7,17 @@ import { electronAPI } from "@electron-toolkit/preload";
77
if (process.contextIsolated) {
88
try {
99
contextBridge.exposeInMainWorld("electron", electronAPI);
10+
// Expose store API via preload
11+
contextBridge.exposeInMainWorld("api", {
12+
store: {
13+
get: (key: string) => ipcRenderer.invoke("store-get", key),
14+
set: (key: string, value: unknown) => ipcRenderer.invoke("store-set", key, value),
15+
has: (key: string) => ipcRenderer.invoke("store-has", key),
16+
delete: (key: string) => ipcRenderer.invoke("store-delete", key),
17+
reset: (keys?: string[]) => ipcRenderer.invoke("store-reset", keys),
18+
},
19+
});
1020
} catch (error) {
1121
console.error(error);
1222
}
13-
} else {
14-
// @ts-expect-error (define in dts)
15-
window.electron = electronAPI;
1623
}

0 commit comments

Comments
 (0)