From 0871083776a8a158daf0fad4ee39fa251fc6f6a8 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Thu, 27 Jul 2023 16:25:36 -0400 Subject: [PATCH] app: fix tray icon color scheme in dark mode --- app/assets/iconDarkTemplate.png | Bin 0 -> 402 bytes app/assets/iconDarkTemplate@2x.png | Bin 0 -> 741 bytes app/assets/iconDarkUpdateTemplate.png | Bin 0 -> 440 bytes app/assets/iconDarkUpdateTemplate@2x.png | Bin 0 -> 763 bytes app/forge.config.ts | 4 +++ app/src/index.ts | 42 +++++++++++++++-------- 6 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 app/assets/iconDarkTemplate.png create mode 100644 app/assets/iconDarkTemplate@2x.png create mode 100644 app/assets/iconDarkUpdateTemplate.png create mode 100644 app/assets/iconDarkUpdateTemplate@2x.png diff --git a/app/assets/iconDarkTemplate.png b/app/assets/iconDarkTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..853d350804d130f44ad618b3e64fe538537e62a1 GIT binary patch literal 402 zcmV;D0d4+?P)eU*)8s4? z_(TdjI{$|uyx5CU68+>4jNu4pI-bWB>Y*=;EmFlchQ;hZhzV?=h6m{qtEiySLn~*+ zRpj2IK;Xu;odvyKis{W4u65Ba#*q`#{8?9#U(DbK&tm#>s5uv6PGwqi|Lr0P>;6rz z=bF4J=BP8+z%ouWr{jq2c#`&>(^$d*_A#$-59S|TMc$>ed98or7I%7Y&%L^eoQnVH w9NP=+o}|S;zFkGu#6Q+uMFzz`2BhE71Q#<}?s@#GQ2+n{07*qoM6N<$f){tF*Z=?k literal 0 HcmV?d00001 diff --git a/app/assets/iconDarkTemplate@2x.png b/app/assets/iconDarkTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a94c9e27d9b7ba048ff37175c37d5f3be18e322 GIT binary patch literal 741 zcmV z732f?fhLqEZ^(b;8Oa6g=R5YVbV8|hP91%>oE{C>A5@!P$bB0{h@^HZZ zsoD&Zel0&nO65^r^?I^f%M)Y?;YX4Uh~ z0(y}`1k)1ZX4ZbK?>1n$|dQiSh!{jP?0h4m&p*mvy zJ_3^)wmW`$5TRSB+_ph&?;v9^`M#taDj%og)L13@wFvp z0&*|L;E!cdpVmL>fCU1O59Dp@Dz{3Asaoz6TIaL}%R&z9X1}+LG-) zPj-0Bh2W}ucjl>wq4R+(VRZnu2d^;eY)I(^! zuEZKHf(fry?|>w?PIoZh4s1gBTQRL932i{c1lA%utwF>Dn)+X^j^-j_0p=3q*1FTqENU>1XY_OLV3kw$ZHY{u;vL0k1KW0s-q5Lk! z_jb?A@#eiZ=G3QobMC$8-Cr*)<&i@cPZ9aXhz)sw9y7hNm{N7w(TL(>}84uz&zay^5HQI57WAXd5sD0MNpNcEAg-ctc#yl@$ zL7(T*rR#Us;0qhL#iJy|f&8wyfL_dDR{UuN;r1hs;UJMRjal>Dh9eAN1a+pZPvxSD z9LnEt7j9IG-$_E)A_Ykf_x6&RfxE%0;ZA!JeJ6@KD;E0000#j#KxMRNzlHScc!JC$3rVDimRkN5Qnl>hPg1dhbdg@meneW9EyZ`! zvdf7{^de9dD~Kqv?CFr1mn?g0){D9_?oC+Zy)d7|R|Dj$Ww#Khb?~2g7JtcF1Smr1 zdM}E^T8W&xH-ibp+(8aiXCVQ5=}ysn$F<#6+sNMGkC)n_|Q9Z0fL6Lpw6aY;VKh(#YfG?bBq`~!!OPxVBMk)(sGPb@~d z>>;Bt2U&@+8m4!=K!99H_-wmXCDu5(h(Nje#BJnP0|n$t;sJ6r71etbkShr}u8*Ra zYDnKX?R&Mf0IT5c6ImqdA;R>BqA_GNwEmn42z5ss=?Be_1Vm>7k`TH*6KTSuVGRZ* taUmsMEpGy%fxskOMQA4?2{=z}{{aP#Wiwn~FQotg002ovPDHLkV1jHGTDSlJ literal 0 HcmV?d00001 diff --git a/app/forge.config.ts b/app/forge.config.ts index fc7639a82..c60831c26 100644 --- a/app/forge.config.ts +++ b/app/forge.config.ts @@ -23,6 +23,10 @@ const config: ForgeConfig = { path.join(__dirname, './assets/iconTemplate@2x.png'), path.join(__dirname, './assets/iconUpdateTemplate.png'), path.join(__dirname, './assets/iconUpdateTemplate@2x.png'), + path.join(__dirname, './assets/iconDarkTemplate.png'), + path.join(__dirname, './assets/iconDarkTemplate@2x.png'), + path.join(__dirname, './assets/iconDarkUpdateTemplate.png'), + path.join(__dirname, './assets/iconDarkUpdateTemplate@2x.png'), ...(process.platform === 'darwin' ? ['../llama/ggml-metal.metal'] : []), ], ...(process.env.SIGN diff --git a/app/src/index.ts b/app/src/index.ts index deb751243..d55cbb7a2 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -1,5 +1,5 @@ import { spawn, ChildProcess } from 'child_process' -import { app, autoUpdater, dialog, Tray, Menu, BrowserWindow, MenuItemConstructorOptions } from 'electron' +import { app, autoUpdater, dialog, Tray, Menu, BrowserWindow, MenuItemConstructorOptions, nativeTheme } from 'electron' import Store from 'electron-store' import winston from 'winston' import 'winston-daily-rotate-file' @@ -81,8 +81,26 @@ function firstRunWindow() { } let tray: Tray | null = null +let updateAvailable = false +const assetPath = app.isPackaged ? process.resourcesPath : path.join(__dirname, '..', '..', 'assets') -function setTray(updateAvailable: boolean) { +function trayIconPath() { + return nativeTheme.shouldUseDarkColors + ? updateAvailable + ? path.join(assetPath, 'iconDarkUpdateTemplate.png') + : path.join(assetPath, 'iconDarkTemplate.png') + : updateAvailable + ? path.join(assetPath, 'iconUpdateTemplate.png') + : path.join(assetPath, 'iconTemplate.png') +} + +function updateTrayIcon() { + if (tray) { + tray.setImage(trayIconPath()) + } +} + +function updateTray() { const updateItems: MenuItemConstructorOptions[] = [ { label: 'An update is available', enabled: false }, { @@ -97,21 +115,16 @@ function setTray(updateAvailable: boolean) { { role: 'quit', label: 'Quit Ollama', accelerator: 'Command+Q' }, ]) - const iconPath = app.isPackaged - ? updateAvailable - ? path.join(process.resourcesPath, 'iconUpdateTemplate.png') - : path.join(process.resourcesPath, 'iconTemplate.png') - : updateAvailable - ? path.join(__dirname, '..', '..', 'assets', 'iconUpdateTemplate.png') - : path.join(__dirname, '..', '..', 'assets', 'iconTemplate.png') - if (!tray) { - tray = new Tray(iconPath) + tray = new Tray(trayIconPath()) } tray.setToolTip(updateAvailable ? 'An update is available' : 'Ollama') tray.setContextMenu(menu) - tray.setImage(iconPath) + tray.setImage(trayIconPath()) + + nativeTheme.off('updated', updateTrayIcon) + nativeTheme.on('updated', updateTrayIcon) } let proc: ChildProcess = null @@ -155,7 +168,7 @@ function init() { }, 60 * 60 * 1000) } - setTray(false) + updateTray() if (process.platform === 'darwin') { if (app.isPackaged) { @@ -238,5 +251,6 @@ autoUpdater.on('error', e => { }) autoUpdater.on('update-downloaded', () => { - setTray(true) + updateAvailable = true + updateTray() })