M0-M11 狩夜人笔记初始实现:11里程碑+86测试

This commit is contained in:
hunter-dev
2026-08-24 20:35:22 +08:00
commit 3ebd33536b
106 changed files with 10490 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
// main 进程入口(M1:创建窗口 + 初始化库 + 注册 IPC)
import { app, BrowserWindow, ipcMain } from 'electron';
import nodePath from 'node:path';
import { fileURLToPath } from 'node:url';
import { VaultService } from './services/vault-service.js';
import { registerIpc } from './ipc/handlers.js';
import { IPC } from '@hunter/shared';
const __dirname = nodePath.dirname(fileURLToPath(import.meta.url));
let win: BrowserWindow | null = null;
function createWindow() {
win = new BrowserWindow({
width: 1200, height: 760, minWidth: 900, minHeight: 580,
center: true, frame: false, show: false,
webPreferences: {
preload: nodePath.join(__dirname, '../preload/index.mjs'),
contextIsolation: true, nodeIntegration: false, sandbox: false
}
});
win.on('ready-to-show', () => win?.show());
win.on('closed', () => { win = null; });
// 窗口控制(FR-W2)
ipcMain.on(IPC.winMinimize, () => win?.minimize());
ipcMain.on(IPC.winMaximize, () => { if (win?.isMaximized()) win.unmaximize(); else win?.maximize(); });
ipcMain.on(IPC.winClose, () => win?.close());
if (process.env.ELECTRON_RENDERER_URL) win.loadURL(process.env.ELECTRON_RENDERER_URL);
else win.loadFile(nodePath.join(__dirname, '../renderer/index.html'));
return win;
}
app.whenReady().then(async () => {
const vault = new VaultService();
await vault.init(); // 确保有当前库
registerIpc(vault);
createWindow();
app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) createWindow(); });
});
// 关闭前冲刷:渲染层监听窗口 close 事件自行 flush(FR-S4),M1 先以关闭前 onbeforeunload 兜底
app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit(); });