Upload via GUI (72 Dateien)
This commit is contained in:
+17
-10
@@ -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 {}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user