From 3cb288cd3b8467a2f80b5fd142ca3e6e84ac49e8 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 1 Apr 2022 11:25:49 -0400 Subject: [PATCH] futher review comments Signed-off-by: Sebastian Malton --- package.json | 1 - src/main/tray/tray.ts | 39 ++++++++++++++++++++++----------------- yarn.lock | 27 --------------------------- 3 files changed, 22 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index c249ff44e1..6be5a730ab 100644 --- a/package.json +++ b/package.json @@ -209,7 +209,6 @@ "@sentry/electron": "^3.0.6", "@sentry/integrations": "^6.19.3", "@types/circular-dependency-plugin": "5.0.5", - "@types/data-urls": "^2.0.1", "abort-controller": "^3.0.0", "auto-bind": "^4.0.0", "await-lock": "^2.1.0", diff --git a/src/main/tray/tray.ts b/src/main/tray/tray.ts index 58ed210e0b..db6a197329 100644 --- a/src/main/tray/tray.ts +++ b/src/main/tray/tray.ts @@ -14,7 +14,7 @@ import type { WindowManager } from "../window-manager"; import logger from "../logger"; import { isWindows, productName } from "../../common/vars"; import { exitApp } from "../exit-app"; -import { base64, getOrInsertWithAsync, toJS } from "../../common/utils"; +import { base64, Disposer, disposer, getOrInsertWithAsync, toJS } from "../../common/utils"; import type { TrayMenuRegistration } from "./tray-menu-registration"; import sharp from "sharp"; import LogoLens from "../../renderer/components/icon/logo-lens.svg"; @@ -52,7 +52,7 @@ async function createTrayIcon({ shouldUseDarkColors, size, sourceSvg }: CreateTr }); } -function computeCurrentTrayIcon() { +function createCurrentTrayIcon() { return createTrayIcon({ shouldUseDarkColors: nativeTheme.shouldUseDarkColors, size: 16, @@ -60,29 +60,34 @@ function computeCurrentTrayIcon() { }); } -function watchShouldUseDarkColors(tray: Tray) { +function watchShouldUseDarkColors(tray: Tray): Disposer { let prevShouldUseDarkColors = nativeTheme.shouldUseDarkColors; - - nativeTheme.on("updated", () => { + const onUpdated = () => { if (prevShouldUseDarkColors !== nativeTheme.shouldUseDarkColors) { prevShouldUseDarkColors = nativeTheme.shouldUseDarkColors; - computeCurrentTrayIcon() + createCurrentTrayIcon() .then(img => tray.setImage(img)); } - }); + }; + + nativeTheme.on("updated", onUpdated); + + return () => nativeTheme.off("updated", onUpdated); } export async function initTray( windowManager: WindowManager, trayMenuItems: IComputedValue, navigateToPreferences: () => void, -) { - const icon = await computeCurrentTrayIcon(); +): Promise { + const icon = await createCurrentTrayIcon(); + const dispose = disposer(); tray = new Tray(icon); tray.setToolTip(packageInfo.description); tray.setIgnoreDoubleClickEvents(true); - watchShouldUseDarkColors(tray); + + dispose.push(watchShouldUseDarkColors(tray)); if (isWindows) { tray.on("click", () => { @@ -92,7 +97,7 @@ export async function initTray( }); } - const disposers = [ + dispose.push( autorun(() => { try { const menu = createTrayMenu(windowManager, toJS(trayMenuItems.get()), navigateToPreferences); @@ -102,13 +107,13 @@ export async function initTray( logger.error(`${TRAY_LOG_PREFIX}: building failed`, { error }); } }), - ]; + () => { + tray?.destroy(); + tray = null; + }, + ); - return () => { - disposers.forEach(disposer => disposer()); - tray?.destroy(); - tray = null; - }; + return dispose; } function getMenuItemConstructorOptions(trayItem: TrayMenuRegistration): Electron.MenuItemConstructorOptions { diff --git a/yarn.lock b/yarn.lock index 2c65f41446..2fd51e9d1a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1470,15 +1470,6 @@ resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-3.1.47.tgz#36e549dd3f1322742a3a738e7c113ebe48221860" integrity sha512-eI6gvpcGHLk3dAuHYnRCAjX+41gMv1nz/VP55wAe5HtmAKDOoPSfr3f6vkMc08ov1S0NsjvUBxDtHHxqQY1LGA== -"@types/data-urls@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/data-urls/-/data-urls-2.0.1.tgz#4a5491583513e8a84044f7e7fbac2ca246c44ed9" - integrity sha512-8/IGbezKc9SEeL9BHdZ4whS9EaYzXfQ6eEC2s34RXfnaEkTasKCWldq/gfoEzbByDD5GXyqEESogVRtdskJXEA== - dependencies: - "@types/node" "*" - "@types/whatwg-mimetype" "*" - "@types/whatwg-url" "*" - "@types/debug@^4.1.6": version "4.1.7" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" @@ -2127,11 +2118,6 @@ resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.5.tgz#2a1413aded46e67a1fe2386800e291123ed75eb1" integrity sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw== -"@types/webidl-conversions@*": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" - integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q== - "@types/webpack-dev-server@^4.7.2": version "4.7.2" resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-4.7.2.tgz#a12d9881aa23cdd4cecbb2d31fa784a45c4967e0" @@ -2182,19 +2168,6 @@ tapable "^2.2.0" webpack "^5" -"@types/whatwg-mimetype@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/whatwg-mimetype/-/whatwg-mimetype-2.1.1.tgz#1b7b7aecaa3695209fd2f3a808dd5729973a52fa" - integrity sha512-ojnf89qt5AWnqsjyPqMLN8uVaxm5x23vxNQ1me6EPBOdJe1YYuIZUzg809MZUG8UU6HKhkr6ah4fi2WUvD0DFw== - -"@types/whatwg-url@*": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.1.tgz#f1aac222dab7c59e011663a0cb0a3117b2ef05d4" - integrity sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ== - dependencies: - "@types/node" "*" - "@types/webidl-conversions" "*" - "@types/ws@^6.0.1": version "6.0.4" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.4.tgz#7797707c8acce8f76d8c34b370d4645b70421ff1"