Refacor electron app and add migrations

This commit is contained in:
2026-03-04 01:38:43 +01:00
parent 4e95ae77c5
commit be91b6dfe8
70 changed files with 1824 additions and 923 deletions

19
electron/app/flags.ts Normal file
View File

@@ -0,0 +1,19 @@
import { app } from 'electron';
export function configureAppFlags(): void {
// Disable sandbox on Linux to avoid SUID / /tmp shared-memory issues
if (process.platform === 'linux') {
app.commandLine.appendSwitch('no-sandbox');
app.commandLine.appendSwitch('disable-dev-shm-usage');
}
// Suppress Autofill devtools errors
app.commandLine.appendSwitch('disable-features', 'Autofill,AutofillAssistant,AutofillServerCommunication');
// Allow media autoplay without user gesture
app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
// Accept self-signed certificates in development (for --ssl dev server)
if (process.env['SSL'] === 'true') {
app.commandLine.appendSwitch('ignore-certificate-errors');
}
}

40
electron/app/lifecycle.ts Normal file
View File

@@ -0,0 +1,40 @@
import { app, BrowserWindow } from 'electron';
import {
initializeDatabase,
destroyDatabase,
getDataSource
} from '../db/database';
import { createWindow } from '../window/create-window';
import {
setupCqrsHandlers,
setupSystemHandlers,
setupWindowControlHandlers
} from '../ipc';
export function registerAppLifecycle(): void {
app.whenReady().then(async () => {
await initializeDatabase();
setupCqrsHandlers();
setupWindowControlHandlers();
setupSystemHandlers();
await createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0)
createWindow();
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin')
app.quit();
});
app.on('before-quit', async (event) => {
if (getDataSource()?.isInitialized) {
event.preventDefault();
await destroyDatabase();
app.quit();
}
});
}