const { app, BrowserWindow, screen } = require('electron') const path = require('path') const fs = require('fs') const WINDOW_WIDTH = 382 const WINDOW_HEIGHT = 900 const MAP_PATH = path.join(__dirname, 'map.html') // ./map.html const MAP_UPDATE_INTERVAL_MS = 1000 function createWindow() { const { width, height } = screen.getPrimaryDisplay().workAreaSize const x = width - WINDOW_WIDTH const y = 0 const mainWindow = new BrowserWindow({ width: WINDOW_WIDTH, height: WINDOW_HEIGHT, x: x, y: y, titleBarStyle: 'customButtonsOnHover', titleBarOverlay: false, frame: false, resizable: false, alwaysOnTop: true, roundedCorners: false, show: true, backgroundColor: '#2e3440', webPreferences: { nodeIntegration: false, contextIsolation: true, // Allow loading local files webSecurity: false, allowRunningInsecureContent: true, // Keep animations smooth backgroundThrottling: false } }) if (fs.existsSync(MAP_PATH)) { mainWindow.loadFile(MAP_PATH) } // Automatic reloading let lastModified = 0 setInterval(() => { if (!fs.existsSync(MAP_PATH)) { return } // Only reload if file was actually modified since the last check const stats = fs.statSync(MAP_PATH) const fileTime = stats.mtime.getTime() if (fileTime <= lastModified) { return; } if (lastModified == 0) { mainWindow.loadFile(MAP_PATH) lastModified = fileTime return } // Use executeJavaScript to reload content smoothly mainWindow.webContents.executeJavaScript(` document.body.style.transition = 'opacity 0.2s ease-in-out'; document.body.style.opacity = '0.8'; setTimeout(() => { window.location.reload(); }, 100); `).catch(() => { mainWindow.webContents.reload() }) lastModified = fileTime }, MAP_UPDATE_INTERVAL_MS) } app.whenReady().then(createWindow) // Handle certificate errors for local file loading app.on('certificate-error', (event, webContents, url, error, certificate, callback) => { event.preventDefault() callback(true) })