mirror of
https://github.com/imsyy/SPlayer.git
synced 2025-11-24 19:13:00 +08:00
✨ feat: 完善 store 通信
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -16,7 +16,7 @@ coverage
|
||||
out
|
||||
.env
|
||||
auto-imports.d.ts
|
||||
# components.d.ts
|
||||
components.d.ts
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -29,8 +29,6 @@ export const createWindow = (
|
||||
// 启用 Node.js
|
||||
nodeIntegration: true,
|
||||
nodeIntegrationInWorker: true,
|
||||
// 启用上下文隔离
|
||||
contextIsolation: false,
|
||||
},
|
||||
};
|
||||
// 合并参数
|
||||
|
||||
@@ -78,7 +78,6 @@ class LoginWindow {
|
||||
spellcheck: false,
|
||||
nodeIntegration: true,
|
||||
nodeIntegrationInWorker: true,
|
||||
contextIsolation: false,
|
||||
session: loginSession,
|
||||
},
|
||||
});
|
||||
|
||||
11
electron/preload/index.d.ts
vendored
11
electron/preload/index.d.ts
vendored
@@ -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>;
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user