- electron-builder 26.8.1 (devDep, exact pin) with NSIS x64 target - moved electron 41.3.0 to devDependencies (electron-builder requirement) - new scripts: dist, dist:dir, predist runs rebuild:electron + build - main: detect --hidden arg, skip inbox window on hidden launch - main: first-run autostart enable on packaged Windows (.autostart-init flag) - tray: 'Windows 시작 시 자동 실행' checkbox (packaged only) - README: packaging section + Dev Mode requirement Build verified: dist/Inkling Setup 0.2.0.exe (100MB), dist/win-unpacked/ runs better-sqlite3 native module from app.asar.unpacked. Note: requires Windows Developer Mode ON (winCodeSign cache extraction contains darwin symlinks that need SeCreateSymbolicLinkPrivilege). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import electron from 'electron';
|
|
import type { Tray as TrayType, MenuItemConstructorOptions } from 'electron';
|
|
const { app, Tray, Menu, nativeImage } = electron;
|
|
|
|
let tray: TrayType | null = null;
|
|
|
|
function buildMenu(showInbox: () => void, showCapture: () => void) {
|
|
const items: MenuItemConstructorOptions[] = [
|
|
{ label: '구출한 메모 보기', click: showInbox },
|
|
{ label: '기억 구출하기', click: showCapture },
|
|
{ type: 'separator' }
|
|
];
|
|
if (app.isPackaged) {
|
|
const { openAtLogin } = app.getLoginItemSettings();
|
|
items.push({
|
|
label: '윈도우 시작 시 자동 실행',
|
|
type: 'checkbox',
|
|
checked: openAtLogin,
|
|
click: (item) => {
|
|
app.setLoginItemSettings({
|
|
openAtLogin: item.checked,
|
|
args: ['--hidden']
|
|
});
|
|
}
|
|
});
|
|
items.push({ type: 'separator' });
|
|
}
|
|
items.push({ label: '종료', click: () => { app.isQuitting = true; app.quit(); } });
|
|
return Menu.buildFromTemplate(items);
|
|
}
|
|
|
|
export function createTray(showInbox: () => void, showCapture: () => void): TrayType {
|
|
const icon = nativeImage.createEmpty();
|
|
tray = new Tray(icon);
|
|
tray.setToolTip('Inkling');
|
|
tray.setContextMenu(buildMenu(showInbox, showCapture));
|
|
tray.on('click', showInbox);
|
|
return tray;
|
|
}
|