const { app, BrowserWindow, Menu, ipcMain, nativeTheme } = require('electron'); const path = require('path'); let mainWindow; let isDarkMode = true; function createWindow() { mainWindow = new BrowserWindow({ width: 1400, height: 900, minWidth: 1000, minHeight: 700, webPreferences: { nodeIntegration: false, contextIsolation: true, preload: path.join(__dirname, 'preload.js') }, icon: path.join(__dirname, 'assets', 'icon.png'), backgroundColor: '#000000', resizable: true, frame: false }); mainWindow.loadFile('index.html'); const menu = Menu.buildFromTemplate([ { label: 'Datei', submenu: [ { label: 'Neue Datei analysieren', accelerator: 'CmdOrCtrl+N', click: () => mainWindow.webContents.send('new-file') }, { type: 'separator' }, { label: 'Beenden', accelerator: 'CmdOrCtrl+Q', click: () => app.quit() } ] }, { label: 'Ansicht', submenu: [ { label: 'Dark Mode', type: 'checkbox', checked: isDarkMode, click: (menuItem) => { isDarkMode = menuItem.checked; mainWindow.webContents.send('toggle-theme', isDarkMode); nativeTheme.themeSource = isDarkMode ? 'dark' : 'light'; } }, { type: 'separator' }, { label: 'Vollbild', accelerator: 'F11', click: () => { mainWindow.setFullScreen(!mainWindow.isFullScreen()); } }, { label: 'Entwicklertools', accelerator: 'F12', click: () => mainWindow.webContents.toggleDevTools() } ] }, { label: 'Hilfe', submenu: [ { label: 'Über Metadaten-Crawler', click: () => { const { dialog } = require('electron'); dialog.showMessageBox(mainWindow, { type: 'info', title: 'Über Metadaten-Crawler', message: 'Metadaten-Crawler (MC)', detail: 'Version 1.0.0\n\nEin professionelles Tool zur Extraktion von Metadaten aus Bild- und Videodateien.\n\n© 2025 IntelSight', buttons: ['OK'] }); } } ] } ]); Menu.setApplicationMenu(menu); mainWindow.on('closed', () => { mainWindow = null; }); } app.whenReady().then(() => { createWindow(); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); // IPC handlers ipcMain.handle('get-theme', () => isDarkMode); ipcMain.on('minimize-window', () => { mainWindow.minimize(); }); ipcMain.on('maximize-window', () => { if (mainWindow.isMaximized()) { mainWindow.unmaximize(); } else { mainWindow.maximize(); } }); ipcMain.on('close-window', () => { mainWindow.close(); });