Upload via GUI (72 Dateien)

This commit is contained in:
2026-10-24 20:15:40 +00:00
parent e7a6ba0b86
commit 64d6cf1afb
18 changed files with 325 additions and 42 deletions
+17 -10
View File
@@ -110,8 +110,11 @@ ipcMain.handle('notify', (_e, { title, body }) => {
});
// ─── Einstellungen (settings.json im Benutzerordner) ────────────────────────
const DEFAULTS = { theme: 'system', autostart: false, closeToTray: true, notifications: true, pollSeconds: 60, startMinimized: false, bounds: null };
const DEFAULTS = { theme: 'system', autostart: false, closeToTray: true, notifications: true, pollSeconds: 60, startMinimized: false, bounds: null, language: null };
let settings = { ...DEFAULTS };
// Sprache für Tray-Menü und Meldungen (Auswahl im Programm, sonst die von Windows)
const lang = () => (settings.language === 'de' || settings.language === 'en' ? settings.language : ((app.getLocale() || 'de').toLowerCase().startsWith('de') ? 'de' : 'en'));
const L = (de, en) => (lang() === 'en' ? en : de);
const settingsFile = () => path.join(app.getPath('userData'), 'settings.json');
function loadSettings() { try { settings = { ...DEFAULTS, ...JSON.parse(fs.readFileSync(settingsFile(), 'utf8')) }; } catch { settings = { ...DEFAULTS }; } }
function saveSettings() { try { fs.writeFileSync(settingsFile(), JSON.stringify(settings)); } catch {} }
@@ -124,6 +127,7 @@ ipcMain.handle('settings:set', (_e, patch) => {
for (const k of Object.keys(DEFAULTS)) if (k in patch && k !== 'bounds') settings[k] = patch[k];
saveSettings(); applyAutostart();
applyNativeTheme();
try { tray?.setContextMenu(trayMenu()); } catch {}
return { ...settings, version: app.getVersion(), packaged: app.isPackaged };
});
@@ -134,24 +138,27 @@ function showWindow(page) {
win.show(); if (win.isMinimized()) win.restore(); win.focus();
if (page) win.webContents.send('navigate', page);
}
function trayMenu() {
return Menu.buildFromTemplate([
{ label: L('DeskHub öffnen', 'Open DeskHub'), click: () => showWindow() },
{ label: 'Tickets', click: () => showWindow('tickets') },
{ label: L('Neues Ticket', 'New ticket'), click: () => showWindow('newticket') },
{ type: 'separator' },
{ label: L('Beenden', 'Quit'), click: () => { quitting = true; app.quit(); } },
]);
}
function createTray() {
const img = nativeImage.createFromPath(path.join(__dirname, 'assets', 'icon.ico'));
tray = new Tray(img.resize({ width: 16, height: 16 }));
tray.setToolTip('DeskHub');
tray.setContextMenu(Menu.buildFromTemplate([
{ label: 'DeskHub öffnen', click: () => showWindow() },
{ label: 'Tickets', click: () => showWindow('tickets') },
{ label: 'Neues Ticket', click: () => showWindow('newticket') },
{ type: 'separator' },
{ label: 'Beenden', click: () => { quitting = true; app.quit(); } },
]));
tray.setContextMenu(trayMenu());
tray.on('click', () => showWindow());
}
ipcMain.handle('badge', (_e, { count, dataUrl }) => {
if (!win) return;
try {
win.setOverlayIcon(count > 0 && dataUrl ? nativeImage.createFromDataURL(dataUrl) : null, count > 0 ? `${count} neu` : '');
tray?.setToolTip(count > 0 ? `DeskHub – ${count} neu` : 'DeskHub');
win.setOverlayIcon(count > 0 && dataUrl ? nativeImage.createFromDataURL(dataUrl) : null, count > 0 ? `${count} ${L('neu', 'new')}` : '');
tray?.setToolTip(count > 0 ? `DeskHub – ${count} ${L('neu', 'new')}` : 'DeskHub');
} catch {}
});