diff --git a/apps/token-tray/assets/icon.png b/apps/token-tray/assets/icon.png new file mode 100644 index 0000000..2b13863 Binary files /dev/null and b/apps/token-tray/assets/icon.png differ diff --git a/apps/token-tray/assets/icon.svg b/apps/token-tray/assets/icon.svg new file mode 100644 index 0000000..07f2204 --- /dev/null +++ b/apps/token-tray/assets/icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + MC + + diff --git a/apps/token-tray/assets/tray-icon-16.png b/apps/token-tray/assets/tray-icon-16.png new file mode 100644 index 0000000..d958b7f Binary files /dev/null and b/apps/token-tray/assets/tray-icon-16.png differ diff --git a/apps/token-tray/assets/tray-icon-32.png b/apps/token-tray/assets/tray-icon-32.png new file mode 100644 index 0000000..ac5dc44 Binary files /dev/null and b/apps/token-tray/assets/tray-icon-32.png differ diff --git a/apps/token-tray/package.json b/apps/token-tray/package.json index 7c2f9ee..28e3795 100644 --- a/apps/token-tray/package.json +++ b/apps/token-tray/package.json @@ -1,6 +1,6 @@ { "name": "@media-cluster/token-tray", - "version": "0.1.0", + "version": "0.1.1", "private": true, "description": "Windows system tray helper to refresh Viaplay/F1TV session tokens", "author": "Vonas Media Cluster", @@ -32,12 +32,14 @@ }, "files": [ "dist/**/*", + "assets/**/*", "package.json" ], "extraMetadata": { "main": "dist/main.js" }, "win": { + "icon": "assets/icon.png", "target": [ { "target": "nsis", diff --git a/apps/token-tray/src/main.ts b/apps/token-tray/src/main.ts index bb3a97e..86f4e4e 100644 --- a/apps/token-tray/src/main.ts +++ b/apps/token-tray/src/main.ts @@ -7,6 +7,8 @@ import { nativeImage, shell, } from "electron"; +import fs from "fs"; +import path from "path"; import { configPath, loadConfig, saveConfig, type TrayConfig } from "./config"; import { pingAgent } from "./viaplay"; import { refreshAllSilent, refreshDueSilent } from "./jobs"; @@ -22,6 +24,32 @@ let lastDueCount = 0; const POLL_MS = 10 * 60 * 1000; // elke 10 min: vraag server wie bijna verloopt const WITHIN_MINUTES = 90; // vernieuw als token < 90 min geldig is +function resolveAsset(...parts: string[]): string { + const candidates = [ + path.join(__dirname, "..", "assets", ...parts), + path.join(app.getAppPath(), "assets", ...parts), + path.join(process.resourcesPath, "assets", ...parts), + ]; + for (const p of candidates) { + if (fs.existsSync(p)) return p; + } + return candidates[0]; +} + +function loadTrayImage(): Electron.NativeImage { + for (const name of ["tray-icon-32.png", "tray-icon-16.png", "icon.png"] as const) { + const p = resolveAsset(name); + if (!fs.existsSync(p)) continue; + let img = nativeImage.createFromPath(p); + if (img.isEmpty()) continue; + const { width } = img.getSize(); + // Windows systeemvak: 16–32 px; groter schalen ziet er wazig/onzichtbaar uit + if (width > 32) img = img.resize({ width: 16, height: 16 }); + return img; + } + return nativeImage.createEmpty(); +} + function statusTooltip(): string { const parts = ["Media Cluster Token Tray (auto)"]; if (busy) parts.push("Bezig met stille refresh…"); @@ -237,10 +265,8 @@ async function testConnection() { } function createTray() { - const png = nativeImage.createFromDataURL( - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALElEQVQ4T2NkYGD4z0ABYBzVMKoBQw0YNYPRDWBgYGBgZGBg+M8w6gYGBgYGABv0AQX1mVYpAAAAAElFTkSuQmCC" - ); - tray = new Tray(png.isEmpty() ? nativeImage.createEmpty() : png); + const img = loadTrayImage(); + tray = new Tray(img); tray.setToolTip("Media Cluster Token Tray"); rebuildMenu(); tray.on("double-click", () => void runAuto(true));