feat: M5 外观特效选择+持久化(appearance:load/save IPC+config.json,鼠效 6 选格接 EffectEngine,重开恢复并接线)

This commit is contained in:
hunter-dev
2026-08-24 23:42:46 +08:00
parent 28755547c1
commit cf2600901b
9 changed files with 111 additions and 21 deletions
+3
View File
@@ -50,6 +50,9 @@ export function registerIpc(vault: VaultService) {
const gd = await buildGraphData(fs2.getRoot(), tree); return gd;
});
ipcMain.handle(IPC.appearanceLoad, async () => vault.getAppearance());
ipcMain.handle(IPC.appearanceSave, async (_e, p: { themeId: string; params: Record<string, unknown>; effect: string }) => { await vault.saveAppearance(p); });
ipcMain.handle(IPC.copyMd, async (_e, p: { path: string }) => {
const fs2 = vault.fileService; if (!fs2) return '';
const { body } = await fs2.readDoc(p.path);
+11 -2
View File
@@ -6,13 +6,13 @@ import { RECENT_VAULT_MAX } from '@hunter/shared';
export class ConfigStore {
private file: string;
private cache: { vault?: VaultMeta } | null = null;
private cache: { vault?: VaultMeta; appearance?: { themeId: string; params: Record<string, unknown>; effect: string } } | null = null;
constructor(userDataDir: string) {
this.file = nodePath.join(userDataDir, 'config.json');
}
private async read(): Promise<{ vault?: VaultMeta }> {
private async read(): Promise<{ vault?: VaultMeta; appearance?: { themeId: string; params: Record<string, unknown>; effect: string } }> {
if (this.cache) return this.cache;
try {
const raw = await fs.readFile(this.file, 'utf8');
@@ -46,6 +46,15 @@ export class ConfigStore {
return meta;
}
async getAppearance(): Promise<{ themeId: string; params: Record<string, unknown>; effect: string } | null> {
const c = await this.read();
return c.appearance ?? null;
}
async saveAppearance(data: { themeId: string; params: Record<string, unknown>; effect: string }): Promise<void> {
(await this.read()).appearance = data;
await this.write();
}
async setDefaultRoot(root: string): Promise<VaultMeta> {
const meta = await this.getVaultMeta();
meta.defaultRoot = root;
@@ -50,4 +50,6 @@ export class VaultService {
}
async setDefaultRoot(root: string): Promise<void> { await this.config.setDefaultRoot(root); }
getAppearance() { return this.config.getAppearance(); }
saveAppearance(data: { themeId: string; params: Record<string, unknown>; effect: string }) { return this.config.saveAppearance(data); }
}