From 8392b0773a1c54c7c4f5e99dca4bd0b9c2896e30 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Mon, 30 Dec 2024 18:42:34 +0300 Subject: [PATCH 01/10] refactor(assets): update tray icons - Added new tray icons: `pause.png` and `play.png`. - Removed outdated icons: `youtube-music-tray.png` and `youtube-music-tray-paused.png`. - Enhances clarity and consistency of tray icon states. --- assets/tray-icons/pause.png | Bin 0 -> 23210 bytes assets/tray-icons/play.png | Bin 0 -> 25336 bytes assets/youtube-music-tray-paused.png | Bin 2145 -> 0 bytes assets/youtube-music-tray.png | Bin 1478 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/tray-icons/pause.png create mode 100644 assets/tray-icons/play.png delete mode 100644 assets/youtube-music-tray-paused.png delete mode 100644 assets/youtube-music-tray.png diff --git a/assets/tray-icons/pause.png b/assets/tray-icons/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..26d75817d190b193c0aae0006f2b18d00c9adf23 GIT binary patch literal 23210 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 literal 0 HcmV?d00001 diff --git a/assets/tray-icons/play.png b/assets/tray-icons/play.png new file mode 100644 index 0000000000000000000000000000000000000000..b9c6be7989df48dd2f3787da74fd042538965071 GIT binary patch literal 25336 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 From 10743b37c8fc22cb878d4721514fc3ce9569f208 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Mon, 30 Dec 2024 18:49:04 +0300 Subject: [PATCH 02/10] refactor: update tray icon - Replaced the YouTube Music tray icon with a new play icon. - Ensures alignment with updated asset paths for consistency. --- src/providers/prompt-options.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/prompt-options.ts b/src/providers/prompt-options.ts index 43d592aa0e..ab126fc881 100644 --- a/src/providers/prompt-options.ts +++ b/src/providers/prompt-options.ts @@ -1,4 +1,4 @@ -import youtubeMusicTrayIcon from '@assets/youtube-music-tray.png?asset&asarUnpack'; +import youtubeMusicTrayIcon from '@assets/tray-icons/play.png?asset&asarUnpack'; const promptOptions = { customStylesheet: 'dark', From 0111eafe03343196b982e88f5ba55d9140f87a14 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Mon, 30 Dec 2024 19:01:02 +0300 Subject: [PATCH 03/10] refactor(tray): improve tray setup and icon handling - Fixed wrong icon showing for different player states. - Simplified tray icon setup by consolidating logic into reusable functions. - Replaced vague tray icon assets with clear play/pause icons for better clarity. - Improved code readability and maintainability by introducing helper functions and removing redundant code. --- src/tray.ts | 182 +++++++++++++++++++++++----------------------------- 1 file changed, 82 insertions(+), 100 deletions(-) diff --git a/src/tray.ts b/src/tray.ts index 6059d0e07a..62eee80f8c 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -1,8 +1,8 @@ import { Menu, nativeImage, screen, Tray } from 'electron'; import is from 'electron-is'; -import defaultTrayIconAsset from '@assets/youtube-music-tray.png?asset&asarUnpack'; -import pausedTrayIconAsset from '@assets/youtube-music-tray-paused.png?asset&asarUnpack'; +import playTrayIconAsset from '@assets/tray-icons/play.png?asset&asarUnpack'; +import pauseTrayIconAsset from '@assets/tray-icons/pause.png?asset&asarUnpack'; import config from './config'; @@ -14,7 +14,6 @@ import { t } from '@/i18n'; import type { MenuTemplate } from './menu'; -// Prevent tray being garbage collected let tray: Electron.Tray | undefined; type TrayEvent = ( @@ -22,126 +21,109 @@ type TrayEvent = ( bounds: Electron.Rectangle, ) => void; -export const setTrayOnClick = (fn: TrayEvent) => { - if (!tray) { - return; +interface AppWindowControls { + playPause: () => void; + next: () => void; + previous: () => void; +} + +const getTrayIcon = ( + iconPath: string, + pixelRatio: number, +): Electron.NativeImage => + nativeImage.createFromPath(iconPath).resize({ + width: 16 * pixelRatio, + height: 16 * pixelRatio, + }); + +const handleTrayClick = ( + app: Electron.App, + win: Electron.BrowserWindow, + playPause: () => void, +): void => { + if (config.get('options.trayClickPlayPause')) { + playPause(); + } else if (win.isVisible()) { + win.hide(); + app.dock?.hide(); + } else { + win.show(); + app.dock?.show(); } +}; +const setMacSpecificTraySettings = (trayInstance: Electron.Tray): void => { + trayInstance.setIgnoreDoubleClickEvents(true); +}; + +const getPixelRatio = (): number => { + return is.windows() ? screen.getPrimaryDisplay().scaleFactor || 1 : 1; +}; + +export const setTrayOnClick = (fn: TrayEvent): void => { + if (!tray) return; tray.removeAllListeners('click'); tray.on('click', fn); }; -// Won't do anything on macOS since its disabled -export const setTrayOnDoubleClick = (fn: TrayEvent) => { - if (!tray) { - return; - } - +export const setTrayOnDoubleClick = (fn: TrayEvent): void => { + if (!tray) return; tray.removeAllListeners('double-click'); tray.on('double-click', fn); }; -export const setUpTray = (app: Electron.App, win: Electron.BrowserWindow) => { +export const setUpTray = ( + app: Electron.App, + win: Electron.BrowserWindow, +): void => { if (!config.get('options.tray')) { tray = undefined; return; } - const { playPause, next, previous } = getSongControls(win); - - const pixelRatio = is.windows() - ? screen.getPrimaryDisplay().scaleFactor || 1 - : 1; - const defaultTrayIcon = nativeImage - .createFromPath(defaultTrayIconAsset) - .resize({ - width: 16 * pixelRatio, - height: 16 * pixelRatio, - }); - const pausedTrayIcon = nativeImage - .createFromPath(pausedTrayIconAsset) - .resize({ - width: 16 * pixelRatio, - height: 16 * pixelRatio, - }); - - tray = new Tray(defaultTrayIcon); + const { playPause, next, previous }: AppWindowControls = getSongControls(win); + const pixelRatio = getPixelRatio(); + const playTrayIcon = getTrayIcon(playTrayIconAsset, pixelRatio); + const pauseTrayIcon = getTrayIcon(pauseTrayIconAsset, pixelRatio); - tray.setToolTip(t('main.tray.tooltip.default')); + tray = new Tray(playTrayIcon); + setMacSpecificTraySettings(tray); - // MacOS only - tray.setIgnoreDoubleClickEvents(true); - - tray.on('click', () => { - if (config.get('options.trayClickPlayPause')) { - playPause(); - } else if (win.isVisible()) { - win.hide(); - app.dock?.hide(); - } else { - win.show(); - app.dock?.show(); - } - }); - - const template: MenuTemplate = [ - { - label: t('main.tray.play-pause'), - click() { - playPause(); - }, - }, - { - label: t('main.tray.next'), - click() { - next(); - }, - }, - { - label: t('main.tray.previous'), - click() { - previous(); - }, - }, - { - label: t('main.tray.show'), - click() { - win.show(); - app.dock?.show(); - }, - }, + tray.setToolTip(t('main.tray.tooltip.default')); + tray.on('click', () => handleTrayClick(app, win, playPause)); + + const showWindow = (): void => { + win.show(); + app.dock?.show(); + }; + + const trayMenuTemplate: MenuTemplate = [ + { label: t('main.tray.play-pause'), click: playPause }, + { label: t('main.tray.next'), click: next }, + { label: t('main.tray.previous'), click: previous }, + { label: t('main.tray.show'), click: showWindow }, { type: 'separator' }, - { - label: t('main.tray.restart'), - click: restart, - }, + { label: t('main.tray.restart'), click: restart }, { type: 'separator' }, - { - label: t('main.tray.quit'), - role: 'quit', - }, + { label: t('main.tray.quit'), role: 'quit' }, ]; - const trayMenu = Menu.buildFromTemplate(template); - tray.setContextMenu(trayMenu); + tray.setContextMenu(Menu.buildFromTemplate(trayMenuTemplate)); registerCallback((songInfo, event) => { - if (event === SongInfoEvent.TimeChanged) return; - - if (tray) { - if (typeof songInfo.isPaused === 'undefined') { - tray.setImage(defaultTrayIcon); - return; - } - - tray.setToolTip( - t('main.tray.tooltip.with-song-info', { - artist: songInfo.artist, - title: songInfo.title, - }), - ); - - tray.setImage(songInfo.isPaused ? pausedTrayIcon : defaultTrayIcon); + if (event === SongInfoEvent.TimeChanged || !tray) return; + + if (typeof songInfo.isPaused === 'undefined') { + tray.setImage(playTrayIcon); + return; } + + tray.setToolTip( + t('main.tray.tooltip.with-song-info', { + artist: songInfo.artist, + title: songInfo.title, + }), + ); + tray.setImage(songInfo.isPaused ? playTrayIcon : pauseTrayIcon); }); }; From 082ebcc826e9871c1954a80be1d3bcc0f8117ca2 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Tue, 31 Dec 2024 23:07:59 +0300 Subject: [PATCH 04/10] feat(tray): add support for tray icon themes - Introduced `TrayIconTheme` with options: Default, Fluent, and Material. - Updated the tray menu and configuration to allow selecting tray icon themes. - Refactored tray icon handling to dynamically load icons based on selected theme. --- assets/tray-icons/default/pause.png | Bin 0 -> 18221 bytes assets/tray-icons/default/play.png | Bin 0 -> 19370 bytes assets/tray-icons/{ => fluent}/pause.png | Bin assets/tray-icons/{ => fluent}/play.png | Bin assets/tray-icons/material/pause.png | Bin 0 -> 29559 bytes assets/tray-icons/material/play.png | Bin 0 -> 25377 bytes src/config/defaults.ts | 8 ++ src/i18n/resources/en.json | 8 ++ src/menu.ts | 51 ++++++++ src/providers/prompt-options.ts | 4 +- src/tray.ts | 155 ++++++++++++++++------- 11 files changed, 181 insertions(+), 45 deletions(-) create mode 100644 assets/tray-icons/default/pause.png create mode 100644 assets/tray-icons/default/play.png rename assets/tray-icons/{ => fluent}/pause.png (100%) rename assets/tray-icons/{ => fluent}/play.png (100%) create mode 100644 assets/tray-icons/material/pause.png create mode 100644 assets/tray-icons/material/play.png diff --git a/assets/tray-icons/default/pause.png b/assets/tray-icons/default/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..4f450034ac3bf3a56e9aac2b3fc0c81dca6a00f7 GIT binary patch literal 18221 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 literal 0 HcmV?d00001 diff --git a/assets/tray-icons/default/play.png b/assets/tray-icons/default/play.png new file mode 100644 index 0000000000000000000000000000000000000000..63b51bff178cd2250dbc4cf31b5b45a76e6aaf92 GIT binary patch literal 19370 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 SG}#6$PLRku(5po#k^c`Jc+)We literal 0 HcmV?d00001 diff --git a/assets/tray-icons/pause.png b/assets/tray-icons/fluent/pause.png similarity index 100% rename from assets/tray-icons/pause.png rename to assets/tray-icons/fluent/pause.png diff --git a/assets/tray-icons/play.png b/assets/tray-icons/fluent/play.png similarity index 100% rename from assets/tray-icons/play.png rename to assets/tray-icons/fluent/play.png diff --git a/assets/tray-icons/material/pause.png b/assets/tray-icons/material/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..94cb921886e68cf8e054bc6c9d4fd622fb447f2e GIT binary patch literal 29559 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

oz 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 UnrT0|`w0rHsf|g+N&Kz<0T7&qx&QzG literal 0 HcmV?d00001 diff --git a/assets/tray-icons/material/play.png b/assets/tray-icons/material/play.png new file mode 100644 index 0000000000000000000000000000000000000000..a25481a88662097b37374a7134f69eeddc5d99be GIT binary patch literal 25377 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 promptOptions; diff --git a/src/tray.ts b/src/tray.ts index 62eee80f8c..4141598699 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -1,19 +1,24 @@ import { Menu, nativeImage, screen, Tray } from 'electron'; import is from 'electron-is'; -import playTrayIconAsset from '@assets/tray-icons/play.png?asset&asarUnpack'; -import pauseTrayIconAsset from '@assets/tray-icons/pause.png?asset&asarUnpack'; - +import defaultPlayIcon from '@assets/tray-icons/default/play.png?asset&asarUnpack'; +import defaultPauseIcon from '@assets/tray-icons/default/pause.png?asset&asarUnpack'; +import fluentPlayIcon from '@assets/tray-icons/fluent/play.png?asset&asarUnpack'; +import fluentPauseIcon from '@assets/tray-icons/fluent/pause.png?asset&asarUnpack'; +import materialPlayIcon from '@assets/tray-icons/material/play.png?asset&asarUnpack'; +import materialPauseIcon from '@assets/tray-icons/material/pause.png?asset&asarUnpack'; import config from './config'; - import { restart } from './providers/app-controls'; import registerCallback, { SongInfoEvent } from './providers/song-info'; import getSongControls from './providers/song-controls'; - import { t } from '@/i18n'; +import { TrayIconTheme } from '@/config/defaults'; import type { MenuTemplate } from './menu'; +/** + * This ensures that the tray instance is not garbage-collected. + */ let tray: Electron.Tray | undefined; type TrayEvent = ( @@ -21,11 +26,26 @@ type TrayEvent = ( bounds: Electron.Rectangle, ) => void; -interface AppWindowControls { - playPause: () => void; - next: () => void; - previous: () => void; -} +const getIcons = (theme: TrayIconTheme) => { + switch (theme) { + case TrayIconTheme.Fluent: + return { + play: fluentPlayIcon, + pause: fluentPauseIcon, + }; + case TrayIconTheme.Material: + return { + play: materialPlayIcon, + pause: materialPauseIcon, + }; + case TrayIconTheme.Default: + default: + return { + play: defaultPlayIcon, + pause: defaultPauseIcon, + }; + } +}; const getTrayIcon = ( iconPath: string, @@ -36,6 +56,67 @@ const getTrayIcon = ( height: 16 * pixelRatio, }); +const createTrayIcons = (theme: TrayIconTheme, pixelRatio: number) => { + const { play: playIconPath, pause: pauseIconPath } = getIcons(theme); + return { + playTrayIcon: getTrayIcon(playIconPath, pixelRatio), + pauseTrayIcon: getTrayIcon(pauseIconPath, pixelRatio), + }; +}; + +const createTrayMenu = ( + playPause: () => void, + next: () => void, + previous: () => void, + showWindow: () => void, +): MenuTemplate => [ + { + label: t('main.tray.play-pause'), + click: playPause, + }, + { + label: t('main.tray.next'), + click: next, + }, + { + label: t('main.tray.previous'), + click: previous, + }, + { + label: t('main.tray.show'), + click: showWindow, + }, + { + type: 'separator', + }, + { + label: t('main.tray.restart'), + click: restart, + }, + { + type: 'separator', + }, + { + label: t('main.tray.quit'), + role: 'quit', + }, +]; + +const updateTrayTooltip = ( + trayInstance: Electron.Tray, + songInfo: { artist: string; title: string; isPaused?: boolean }, + playTrayIcon: Electron.NativeImage, + pauseTrayIcon: Electron.NativeImage, +): void => { + trayInstance.setToolTip( + t('main.tray.tooltip.with-song-info', { + artist: songInfo.artist, + title: songInfo.title, + }), + ); + trayInstance.setImage(songInfo.isPaused ? playTrayIcon : pauseTrayIcon); +}; + const handleTrayClick = ( app: Electron.App, win: Electron.BrowserWindow, @@ -66,6 +147,10 @@ export const setTrayOnClick = (fn: TrayEvent): void => { tray.on('click', fn); }; +/** + * This behavior is disabled on macOS as double-click events are ignored + * via `setIgnoreDoubleClickEvents(true)` in `setMacSpecificTraySettings`. + */ export const setTrayOnDoubleClick = (fn: TrayEvent): void => { if (!tray) return; tray.removeAllListeners('double-click'); @@ -77,53 +162,37 @@ export const setUpTray = ( win: Electron.BrowserWindow, ): void => { if (!config.get('options.tray')) { + tray?.destroy(); tray = undefined; return; } - const { playPause, next, previous }: AppWindowControls = getSongControls(win); + const { playPause, next, previous } = getSongControls(win); const pixelRatio = getPixelRatio(); - const playTrayIcon = getTrayIcon(playTrayIconAsset, pixelRatio); - const pauseTrayIcon = getTrayIcon(pauseTrayIconAsset, pixelRatio); - + const trayIconTheme = + config.get('options.trayIconTheme') || TrayIconTheme.Default; + const { playTrayIcon, pauseTrayIcon } = createTrayIcons( + trayIconTheme, + pixelRatio, + ); + + tray?.destroy(); tray = new Tray(playTrayIcon); setMacSpecificTraySettings(tray); - tray.setToolTip(t('main.tray.tooltip.default')); - tray.on('click', () => handleTrayClick(app, win, playPause)); - - const showWindow = (): void => { + const showWindow = () => { win.show(); app.dock?.show(); }; - const trayMenuTemplate: MenuTemplate = [ - { label: t('main.tray.play-pause'), click: playPause }, - { label: t('main.tray.next'), click: next }, - { label: t('main.tray.previous'), click: previous }, - { label: t('main.tray.show'), click: showWindow }, - { type: 'separator' }, - { label: t('main.tray.restart'), click: restart }, - { type: 'separator' }, - { label: t('main.tray.quit'), role: 'quit' }, - ]; + const trayMenu = createTrayMenu(playPause, next, previous, showWindow); - tray.setContextMenu(Menu.buildFromTemplate(trayMenuTemplate)); + tray.setContextMenu(Menu.buildFromTemplate(trayMenu)); + tray.setToolTip(t('main.tray.tooltip.default')); + tray.on('click', () => handleTrayClick(app, win, playPause)); registerCallback((songInfo, event) => { - if (event === SongInfoEvent.TimeChanged || !tray) return; - - if (typeof songInfo.isPaused === 'undefined') { - tray.setImage(playTrayIcon); - return; - } - - tray.setToolTip( - t('main.tray.tooltip.with-song-info', { - artist: songInfo.artist, - title: songInfo.title, - }), - ); - tray.setImage(songInfo.isPaused ? playTrayIcon : pauseTrayIcon); + if (!tray || event === SongInfoEvent.TimeChanged) return; + updateTrayTooltip(tray, songInfo, playTrayIcon, pauseTrayIcon); }); }; From da71433b2ab995def5d42ed2dc0f5c0d78e0907f Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Tue, 31 Dec 2024 23:44:39 +0300 Subject: [PATCH 05/10] refactor(tray): update tray tooltip to use SongInfo type - Replaced inline songInfo type with the existing SongInfo interface. --- src/tray.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/tray.ts b/src/tray.ts index 4141598699..bff929b975 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -9,7 +9,10 @@ import materialPlayIcon from '@assets/tray-icons/material/play.png?asset&asarUnp import materialPauseIcon from '@assets/tray-icons/material/pause.png?asset&asarUnpack'; import config from './config'; import { restart } from './providers/app-controls'; -import registerCallback, { SongInfoEvent } from './providers/song-info'; +import registerCallback, { + SongInfo, + SongInfoEvent, +} from './providers/song-info'; import getSongControls from './providers/song-controls'; import { t } from '@/i18n'; import { TrayIconTheme } from '@/config/defaults'; @@ -104,7 +107,7 @@ const createTrayMenu = ( const updateTrayTooltip = ( trayInstance: Electron.Tray, - songInfo: { artist: string; title: string; isPaused?: boolean }, + songInfo: SongInfo, playTrayIcon: Electron.NativeImage, pauseTrayIcon: Electron.NativeImage, ): void => { From b0af7fcf5bb1ce2bfe188de8bfaebe9aa8c39dbd Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Wed, 1 Jan 2025 08:54:51 +0300 Subject: [PATCH 06/10] refactor(tray): streamline tray icon management - Added the IconSet interface to group play and pause icons. - Replaced `createTrayIcons` with `createTrayIconSet` for better readability and maintainability. - Adjusted functions to leverage IconSet, simplifying code and improving parameter handling. --- src/tray.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/tray.ts b/src/tray.ts index bff929b975..8d93ad8e14 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -24,6 +24,11 @@ import type { MenuTemplate } from './menu'; */ let tray: Electron.Tray | undefined; +export interface IconSet { + play: Electron.NativeImage; + pause: Electron.NativeImage; +} + type TrayEvent = ( event: Electron.KeyboardEvent, bounds: Electron.Rectangle, @@ -59,14 +64,17 @@ const getTrayIcon = ( height: 16 * pixelRatio, }); -const createTrayIcons = (theme: TrayIconTheme, pixelRatio: number) => { +export const createTrayIconSet = ( + theme: TrayIconTheme, + pixelRatio: number, +): IconSet => { const { play: playIconPath, pause: pauseIconPath } = getIcons(theme); + return { - playTrayIcon: getTrayIcon(playIconPath, pixelRatio), - pauseTrayIcon: getTrayIcon(pauseIconPath, pixelRatio), + play: getTrayIcon(playIconPath, pixelRatio), + pause: getTrayIcon(pauseIconPath, pixelRatio), }; }; - const createTrayMenu = ( playPause: () => void, next: () => void, @@ -108,8 +116,7 @@ const createTrayMenu = ( const updateTrayTooltip = ( trayInstance: Electron.Tray, songInfo: SongInfo, - playTrayIcon: Electron.NativeImage, - pauseTrayIcon: Electron.NativeImage, + iconSet: IconSet, ): void => { trayInstance.setToolTip( t('main.tray.tooltip.with-song-info', { @@ -117,7 +124,7 @@ const updateTrayTooltip = ( title: songInfo.title, }), ); - trayInstance.setImage(songInfo.isPaused ? playTrayIcon : pauseTrayIcon); + trayInstance.setImage(songInfo.isPaused ? iconSet.play : iconSet.pause); }; const handleTrayClick = ( @@ -174,13 +181,10 @@ export const setUpTray = ( const pixelRatio = getPixelRatio(); const trayIconTheme = config.get('options.trayIconTheme') || TrayIconTheme.Default; - const { playTrayIcon, pauseTrayIcon } = createTrayIcons( - trayIconTheme, - pixelRatio, - ); + const iconSet = createTrayIconSet(trayIconTheme, pixelRatio); tray?.destroy(); - tray = new Tray(playTrayIcon); + tray = new Tray(iconSet.play); setMacSpecificTraySettings(tray); const showWindow = () => { @@ -196,6 +200,6 @@ export const setUpTray = ( registerCallback((songInfo, event) => { if (!tray || event === SongInfoEvent.TimeChanged) return; - updateTrayTooltip(tray, songInfo, playTrayIcon, pauseTrayIcon); + updateTrayTooltip(tray, songInfo, iconSet); }); }; From 25a278781d0ed5fc92eff57d5c490e66c9734f18 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Wed, 1 Jan 2025 10:14:56 +0300 Subject: [PATCH 07/10] refactor(tray): improve handling and encapsulate logic - Encapsulated tray-related logic into smaller, focused functions. - Introduced `AppContext` and `SongControls` interfaces for better structure. - Centralized tray icon size into a constant. - Simplified window visibility toggling with helper functions. - Improved tooltip and menu configuration clarity. --- src/tray.ts | 145 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 54 deletions(-) diff --git a/src/tray.ts b/src/tray.ts index 8d93ad8e14..828152a616 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -23,12 +23,24 @@ import type { MenuTemplate } from './menu'; * This ensures that the tray instance is not garbage-collected. */ let tray: Electron.Tray | undefined; +const ICON_SIZE = 16; -export interface IconSet { +interface AppContext { + app: Electron.App; + win: Electron.BrowserWindow; +} + +interface IconSet { play: Electron.NativeImage; pause: Electron.NativeImage; } +interface SongControls { + playPause: () => void; + next: () => void; + previous: () => void; +} + type TrayEvent = ( event: Electron.KeyboardEvent, bounds: Electron.Rectangle, @@ -60,8 +72,8 @@ const getTrayIcon = ( pixelRatio: number, ): Electron.NativeImage => nativeImage.createFromPath(iconPath).resize({ - width: 16 * pixelRatio, - height: 16 * pixelRatio, + width: ICON_SIZE * pixelRatio, + height: ICON_SIZE * pixelRatio, }); export const createTrayIconSet = ( @@ -75,23 +87,22 @@ export const createTrayIconSet = ( pause: getTrayIcon(pauseIconPath, pixelRatio), }; }; + const createTrayMenu = ( - playPause: () => void, - next: () => void, - previous: () => void, - showWindow: () => void, + songControls: SongControls, + showWindow: () => AppContext, ): MenuTemplate => [ { label: t('main.tray.play-pause'), - click: playPause, + click: songControls.playPause, }, { label: t('main.tray.next'), - click: next, + click: songControls.next, }, { label: t('main.tray.previous'), - click: previous, + click: songControls.previous, }, { label: t('main.tray.show'), @@ -114,45 +125,53 @@ const createTrayMenu = ( ]; const updateTrayTooltip = ( - trayInstance: Electron.Tray, + tray: Electron.Tray, songInfo: SongInfo, iconSet: IconSet, ): void => { - trayInstance.setToolTip( - t('main.tray.tooltip.with-song-info', { - artist: songInfo.artist, - title: songInfo.title, - }), - ); - trayInstance.setImage(songInfo.isPaused ? iconSet.play : iconSet.pause); + const { title, artist } = songInfo; + + tray.setToolTip(t('main.tray.tooltip.with-song-info', { title, artist })); + tray.setImage(songInfo.isPaused ? iconSet.play : iconSet.pause); }; const handleTrayClick = ( - app: Electron.App, - win: Electron.BrowserWindow, - playPause: () => void, -): void => { - if (config.get('options.trayClickPlayPause')) { - playPause(); - } else if (win.isVisible()) { - win.hide(); - app.dock?.hide(); - } else { - win.show(); - app.dock?.show(); - } + context: AppContext, + togglePlayPause: () => void, +): void => + config.get('options.trayClickPlayPause') + ? togglePlayPause() + : toggleWindowVisibility(context); + +const toggleWindowVisibility = (appContext: AppContext): void => + appContext.win.isVisible() + ? hideWindowAndDock(appContext) + : showWindowAndDock(appContext); + +const hideWindowAndDock = ({ win, app }: AppContext): void => { + win.hide(); + app.dock?.hide(); +}; + +const showWindowAndDock = ({ win, app }: AppContext): void => { + win.show(); + app.dock?.show(); }; -const setMacSpecificTraySettings = (trayInstance: Electron.Tray): void => { - trayInstance.setIgnoreDoubleClickEvents(true); +const configureMacTraySettings = (tray: Electron.Tray): void => { + tray.setIgnoreDoubleClickEvents(true); }; const getPixelRatio = (): number => { - return is.windows() ? screen.getPrimaryDisplay().scaleFactor || 1 : 1; + const defaultScaleFactor = 1; + const scaleFactor = screen.getPrimaryDisplay().scaleFactor; + + return is.windows() ? scaleFactor || defaultScaleFactor : defaultScaleFactor; }; export const setTrayOnClick = (fn: TrayEvent): void => { if (!tray) return; + tray.removeAllListeners('click'); tray.on('click', fn); }; @@ -163,41 +182,59 @@ export const setTrayOnClick = (fn: TrayEvent): void => { */ export const setTrayOnDoubleClick = (fn: TrayEvent): void => { if (!tray) return; + tray.removeAllListeners('double-click'); tray.on('double-click', fn); }; -export const setUpTray = ( - app: Electron.App, - win: Electron.BrowserWindow, -): void => { +export const setUpTray = ({ win, app }: AppContext): void => { if (!config.get('options.tray')) { - tray?.destroy(); - tray = undefined; + destroyTray(); return; } - const { playPause, next, previous } = getSongControls(win); const pixelRatio = getPixelRatio(); - const trayIconTheme = - config.get('options.trayIconTheme') || TrayIconTheme.Default; - const iconSet = createTrayIconSet(trayIconTheme, pixelRatio); + const theme = getTrayTheme(); + const iconSet = createTrayIconSet(theme, pixelRatio); + + initializeTray(iconSet.play); + configureMacTraySettings(tray!); + const songControls = getSongControls(win); + const showWindow = () => ({ app, win }); + const trayMenu = createTrayMenu(songControls, showWindow); + configureTrayMenu(trayMenu); + configureTrayClickHandlers({ app, win }); + + registerSongInfoCallback(iconSet); +}; + +const destroyTray = (): void => { tray?.destroy(); - tray = new Tray(iconSet.play); - setMacSpecificTraySettings(tray); + tray = undefined; +}; - const showWindow = () => { - win.show(); - app.dock?.show(); - }; +const getTrayTheme = (): TrayIconTheme => { + return config.get('options.trayIconTheme') || TrayIconTheme.Default; +}; + +const initializeTray = (icon: Electron.NativeImage): void => { + destroyTray(); // Ensure old tray is removed + tray = new Tray(icon); +}; - const trayMenu = createTrayMenu(playPause, next, previous, showWindow); +const configureTrayMenu = (menuTemplate: MenuTemplate): void => { + tray?.setContextMenu(Menu.buildFromTemplate(menuTemplate)); + tray?.setToolTip(t('main.tray.tooltip.default')); +}; - tray.setContextMenu(Menu.buildFromTemplate(trayMenu)); - tray.setToolTip(t('main.tray.tooltip.default')); - tray.on('click', () => handleTrayClick(app, win, playPause)); +const configureTrayClickHandlers = (context: AppContext): void => { + tray!.on('click', () => + handleTrayClick(context, getSongControls(context.win).playPause), + ); +}; +const registerSongInfoCallback = (iconSet: IconSet): void => { registerCallback((songInfo, event) => { if (!tray || event === SongInfoEvent.TimeChanged) return; updateTrayTooltip(tray, songInfo, iconSet); From 781a49aef41f46f3cb4d4b22cd0e08a7a449f479 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Thu, 2 Jan 2025 07:58:29 +0300 Subject: [PATCH 08/10] refactor(tray): simplify tray icon and menu setup - Replaced repetitive type prefixes with imported Electron types. - Combined `hideWindowAndDock` and `showWindowAndDock` into a unified function. - Modularized tray setup by separating icon creation and menu creation logic. - Improved function readability by restructuring and renaming where needed. --- src/tray.ts | 122 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 52 deletions(-) diff --git a/src/tray.ts b/src/tray.ts index 828152a616..c03d66797d 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -17,22 +17,30 @@ import getSongControls from './providers/song-controls'; import { t } from '@/i18n'; import { TrayIconTheme } from '@/config/defaults'; +import type { + App, + BrowserWindow, + NativeImage, + KeyboardEvent, + Rectangle, +} from 'electron'; + import type { MenuTemplate } from './menu'; /** * This ensures that the tray instance is not garbage-collected. */ -let tray: Electron.Tray | undefined; +let tray: Tray | undefined; const ICON_SIZE = 16; interface AppContext { - app: Electron.App; - win: Electron.BrowserWindow; + app: App; + win: BrowserWindow; } interface IconSet { - play: Electron.NativeImage; - pause: Electron.NativeImage; + play: NativeImage; + pause: NativeImage; } interface SongControls { @@ -41,10 +49,7 @@ interface SongControls { previous: () => void; } -type TrayEvent = ( - event: Electron.KeyboardEvent, - bounds: Electron.Rectangle, -) => void; +type TrayEvent = (event: KeyboardEvent, bounds: Rectangle) => void; const getIcons = (theme: TrayIconTheme) => { switch (theme) { @@ -67,14 +72,14 @@ const getIcons = (theme: TrayIconTheme) => { } }; -const getTrayIcon = ( - iconPath: string, - pixelRatio: number, -): Electron.NativeImage => - nativeImage.createFromPath(iconPath).resize({ +const createTrayIcon = (iconPath: string, pixelRatio: number): NativeImage => { + const iconDimensions = { width: ICON_SIZE * pixelRatio, height: ICON_SIZE * pixelRatio, - }); + }; + + return nativeImage.createFromPath(iconPath).resize(iconDimensions); +}; export const createTrayIconSet = ( theme: TrayIconTheme, @@ -83,8 +88,8 @@ export const createTrayIconSet = ( const { play: playIconPath, pause: pauseIconPath } = getIcons(theme); return { - play: getTrayIcon(playIconPath, pixelRatio), - pause: getTrayIcon(pauseIconPath, pixelRatio), + play: createTrayIcon(playIconPath, pixelRatio), + pause: createTrayIcon(pauseIconPath, pixelRatio), }; }; @@ -125,7 +130,7 @@ const createTrayMenu = ( ]; const updateTrayTooltip = ( - tray: Electron.Tray, + tray: Tray, songInfo: SongInfo, iconSet: IconSet, ): void => { @@ -143,30 +148,34 @@ const handleTrayClick = ( ? togglePlayPause() : toggleWindowVisibility(context); -const toggleWindowVisibility = (appContext: AppContext): void => - appContext.win.isVisible() - ? hideWindowAndDock(appContext) - : showWindowAndDock(appContext); - -const hideWindowAndDock = ({ win, app }: AppContext): void => { - win.hide(); - app.dock?.hide(); -}; - -const showWindowAndDock = ({ win, app }: AppContext): void => { - win.show(); - app.dock?.show(); +const toggleWindowVisibility = (appContext: AppContext): void => { + const { win, app } = appContext; + const isMac = is.macOS(); + const isVisible = win.isVisible(); + + if (isVisible) { + win.hide(); + if (isMac) { + app.dock?.hide(); + } + } else { + win.show(); + if (isMac) { + app.dock?.show(); + } + } }; -const configureMacTraySettings = (tray: Electron.Tray): void => { +const configureMacTraySettings = (tray: Tray): void => { tray.setIgnoreDoubleClickEvents(true); }; const getPixelRatio = (): number => { + const isWindows = is.windows(); const defaultScaleFactor = 1; const scaleFactor = screen.getPrimaryDisplay().scaleFactor; - return is.windows() ? scaleFactor || defaultScaleFactor : defaultScaleFactor; + return isWindows ? scaleFactor || defaultScaleFactor : defaultScaleFactor; }; export const setTrayOnClick = (fn: TrayEvent): void => { @@ -180,33 +189,43 @@ export const setTrayOnClick = (fn: TrayEvent): void => { * This behavior is disabled on macOS as double-click events are ignored * via `setIgnoreDoubleClickEvents(true)` in `setMacSpecificTraySettings`. */ -export const setTrayOnDoubleClick = (fn: TrayEvent): void => { +export const setTrayOnDoubleClick = (listener: TrayEvent): void => { if (!tray) return; tray.removeAllListeners('double-click'); - tray.on('double-click', fn); + tray.on('double-click', listener); }; -export const setUpTray = ({ win, app }: AppContext): void => { - if (!config.get('options.tray')) { +export const setUpTray = (appContext: AppContext): void => { + const isTrayEnabled = config.get('options.tray'); + if (!isTrayEnabled) { destroyTray(); return; } - const pixelRatio = getPixelRatio(); - const theme = getTrayTheme(); - const iconSet = createTrayIconSet(theme, pixelRatio); - - initializeTray(iconSet.play); + const trayIcons = createTrayIcons(); + initializeTray(trayIcons.play); configureMacTraySettings(tray!); - const songControls = getSongControls(win); - const showWindow = () => ({ app, win }); - const trayMenu = createTrayMenu(songControls, showWindow); + const trayMenu = createAppTrayMenu(appContext); configureTrayMenu(trayMenu); - configureTrayClickHandlers({ app, win }); - registerSongInfoCallback(iconSet); + configureTrayClickHandlers(appContext); + registerSongInfoCallback(trayIcons); +}; + +const createTrayIcons = (): IconSet => { + const theme = getTrayTheme(); + const pixelRatio = getPixelRatio(); + + return createTrayIconSet(theme, pixelRatio); +}; + +const createAppTrayMenu = (appContext: AppContext): MenuTemplate => { + const songControls = getSongControls(appContext.win); + const showWindow = (): AppContext => appContext; + + return createTrayMenu(songControls, showWindow); }; const destroyTray = (): void => { @@ -218,8 +237,8 @@ const getTrayTheme = (): TrayIconTheme => { return config.get('options.trayIconTheme') || TrayIconTheme.Default; }; -const initializeTray = (icon: Electron.NativeImage): void => { - destroyTray(); // Ensure old tray is removed +const initializeTray = (icon: NativeImage): void => { + destroyTray(); tray = new Tray(icon); }; @@ -229,9 +248,8 @@ const configureTrayMenu = (menuTemplate: MenuTemplate): void => { }; const configureTrayClickHandlers = (context: AppContext): void => { - tray!.on('click', () => - handleTrayClick(context, getSongControls(context.win).playPause), - ); + const songControls = getSongControls(context.win).playPause; + tray?.on('click', () => handleTrayClick(context, songControls)); }; const registerSongInfoCallback = (iconSet: IconSet): void => { From 437d805f680655cc9c748872f5189bee80b1e2d9 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Fri, 3 Jan 2025 10:23:15 +0300 Subject: [PATCH 09/10] fix(tray): standardize setUpTray argument structure - Fixed `setUpTray` function calls to use an object argument `{ app, win }` for consistent structure. - Updated all relevant occurrences in `index.ts` and `menu.ts`. --- src/index.ts | 2 +- src/menu.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 753a7d4da8..9bf7560f3f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -728,7 +728,7 @@ app.whenReady().then(async () => { mainWindow = await createMainWindow(); await setApplicationMenu(mainWindow); await refreshMenu(mainWindow); - setUpTray(app, mainWindow); + setUpTray({ app, win: mainWindow }); setupProtocolHandler(mainWindow); diff --git a/src/menu.ts b/src/menu.ts index 255c15f65e..b97de5b320 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -431,7 +431,7 @@ export const mainMenuTemplate = async ( 'options.trayIconTheme', TrayIconTheme.Default, ); - setUpTray(app, win); + setUpTray({ app, win }); }, }, { @@ -445,7 +445,7 @@ export const mainMenuTemplate = async ( 'options.trayIconTheme', TrayIconTheme.Fluent, ); - setUpTray(app, win); + setUpTray({ app, win }); }, }, { @@ -459,7 +459,7 @@ export const mainMenuTemplate = async ( 'options.trayIconTheme', TrayIconTheme.Material, ); - setUpTray(app, win); + setUpTray({ app, win }); }, }, ], From 3f6efc5084855db0f5c7a3b97a90d525bfbb49f8 Mon Sep 17 00:00:00 2001 From: yilmazcabuk Date: Fri, 3 Jan 2025 10:24:37 +0300 Subject: [PATCH 10/10] fix(tray): correct tooltip update logic Refactored `updateTrayTooltip` to destructure `isPaused` directly from `songInfo` for cleaner and more consistent logic. --- src/tray.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tray.ts b/src/tray.ts index c03d66797d..08c74b562b 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -134,10 +134,10 @@ const updateTrayTooltip = ( songInfo: SongInfo, iconSet: IconSet, ): void => { - const { title, artist } = songInfo; + const { title, artist, isPaused } = songInfo; tray.setToolTip(t('main.tray.tooltip.with-song-info', { title, artist })); - tray.setImage(songInfo.isPaused ? iconSet.play : iconSet.pause); + tray.setImage(isPaused ? iconSet.play : iconSet.pause); }; const handleTrayClick = (