diff --git a/changelog.md b/changelog.md index 5fa7412..6442c0c 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,3 @@ -### New Features +### Bug Fixes -- 添加覆写脚本执行日志功能 -- 支持查看局域网网络信息 -- 支持托盘菜单显示节点信息 +- 修复托盘菜单在Linux下崩溃的问题 diff --git a/src/main/core/mihomoApi.ts b/src/main/core/mihomoApi.ts index 39cd5e6..a8f14bf 100644 --- a/src/main/core/mihomoApi.ts +++ b/src/main/core/mihomoApi.ts @@ -193,13 +193,15 @@ const mihomoTraffic = async (): Promise => { } else { tray?.setTitle('') } + if (process.platform !== 'linux') { + tray?.setToolTip( + '↑' + + `${calcTraffic(json.up)}/s`.padStart(12) + + '\n↓' + + `${calcTraffic(json.down)}/s`.padStart(12) + ) + } - tray?.setToolTip( - '↑' + - `${calcTraffic(json.up)}/s`.padStart(12) + - '\n↓' + - `${calcTraffic(json.down)}/s`.padStart(12) - ) trafficRetry = 10 mainWindow?.webContents.send('mihomoTraffic', json) } diff --git a/src/main/resolve/tray.ts b/src/main/resolve/tray.ts index 66c2811..87bfe83 100644 --- a/src/main/resolve/tray.ts +++ b/src/main/resolve/tray.ts @@ -14,7 +14,7 @@ import { patchMihomoConfig } from '../core/mihomoApi' import { mainWindow, showMainWindow } from '..' -import { app, Menu, nativeImage, shell, Tray } from 'electron' +import { app, ipcMain, Menu, nativeImage, shell, Tray } from 'electron' import { dataDir, logDir, mihomoCoreDir, mihomoWorkDir } from '../utils/dirs' import { triggerSysProxy } from '../sys/sysproxy' @@ -24,7 +24,7 @@ const buildContextMenu = async (): Promise => { const { mode, tun } = await getControledMihomoConfig() const { sysProxy, autoCloseConnection, proxyInTray = true } = await getAppConfig() let groupsMenu: Electron.MenuItemConstructorOptions[] = [] - if (proxyInTray) { + if (proxyInTray && process.platform !== 'linux') { try { const groups = await mihomoGroups() groupsMenu = groups.map((group) => { @@ -81,6 +81,7 @@ const buildContextMenu = async (): Promise => { await patchControledMihomoConfig({ mode: 'rule' }) await patchMihomoConfig({ mode: 'rule' }) mainWindow?.webContents.send('controledMihomoConfigUpdated') + await updateTrayMenu() } }, { @@ -92,6 +93,7 @@ const buildContextMenu = async (): Promise => { await patchControledMihomoConfig({ mode: 'global' }) await patchMihomoConfig({ mode: 'global' }) mainWindow?.webContents.send('controledMihomoConfigUpdated') + await updateTrayMenu() } }, { @@ -103,6 +105,7 @@ const buildContextMenu = async (): Promise => { await patchControledMihomoConfig({ mode: 'direct' }) await patchMihomoConfig({ mode: 'direct' }) mainWindow?.webContents.send('controledMihomoConfigUpdated') + await updateTrayMenu() } }, { type: 'separator' }, @@ -119,6 +122,7 @@ const buildContextMenu = async (): Promise => { await patchAppConfig({ sysProxy: { enable: !enable } }) } finally { mainWindow?.webContents.send('appConfigUpdated') + await updateTrayMenu() } } }, @@ -135,6 +139,7 @@ const buildContextMenu = async (): Promise => { } await patchMihomoConfig({ tun: { enable } }) mainWindow?.webContents.send('controledMihomoConfigUpdated') + await updateTrayMenu() } }, ...groupsMenu, @@ -184,6 +189,8 @@ export async function createTray(): Promise { const { useDockIcon = true } = await getAppConfig() if (process.platform === 'linux') { tray = new Tray(pngIcon) + const menu = await buildContextMenu() + tray.setContextMenu(menu) } if (process.platform === 'darwin') { const icon = nativeImage.createFromPath(templateIcon) @@ -209,7 +216,8 @@ export async function createTray(): Promise { tray?.addListener('click', async () => { await updateTrayMenu() }) - } else { + } + if (process.platform === 'win32') { tray?.addListener('click', () => { if (mainWindow?.isVisible()) { mainWindow?.close() @@ -221,9 +229,24 @@ export async function createTray(): Promise { await updateTrayMenu() }) } + if (process.platform === 'linux') { + tray?.addListener('click', () => { + if (mainWindow?.isVisible()) { + mainWindow?.close() + } else { + showMainWindow() + } + }) + ipcMain.on('updateTrayMenu', async () => { + await updateTrayMenu() + }) + } } async function updateTrayMenu(): Promise { const menu = await buildContextMenu() tray?.popUpContextMenu(menu) // 弹出菜单 + if (process.platform === 'linux') { + tray?.setContextMenu(menu) + } } diff --git a/src/renderer/src/components/sider/outbound-mode-switcher.tsx b/src/renderer/src/components/sider/outbound-mode-switcher.tsx index 4c7c8c3..030167a 100644 --- a/src/renderer/src/components/sider/outbound-mode-switcher.tsx +++ b/src/renderer/src/components/sider/outbound-mode-switcher.tsx @@ -16,6 +16,7 @@ const OutboundModeSwitcher: React.FC = () => { if (autoCloseConnection) { await mihomoCloseAllConnections() } + window.electron.ipcRenderer.send('updateTrayMenu') } if (!mode) return null return ( diff --git a/src/renderer/src/components/sider/sysproxy-switcher.tsx b/src/renderer/src/components/sider/sysproxy-switcher.tsx index cb3d941..9413808 100644 --- a/src/renderer/src/components/sider/sysproxy-switcher.tsx +++ b/src/renderer/src/components/sider/sysproxy-switcher.tsx @@ -29,6 +29,7 @@ const SysproxySwitcher: React.FC = () => { const onChange = async (enable: boolean): Promise => { await triggerSysProxy(enable) await patchAppConfig({ sysProxy: { enable } }) + window.electron.ipcRenderer.send('updateTrayMenu') } return ( diff --git a/src/renderer/src/components/sider/tun-switcher.tsx b/src/renderer/src/components/sider/tun-switcher.tsx index f2d1b3a..1268dbc 100644 --- a/src/renderer/src/components/sider/tun-switcher.tsx +++ b/src/renderer/src/components/sider/tun-switcher.tsx @@ -54,6 +54,7 @@ const TunSwitcher: React.FC = () => { await patchControledMihomoConfig({ tun: { enable } }) } await patchMihomoConfig({ tun: { enable } }) + window.electron.ipcRenderer.send('updateTrayMenu') } return ( diff --git a/src/renderer/src/pages/proxies.tsx b/src/renderer/src/pages/proxies.tsx index 848482b..cef658e 100644 --- a/src/renderer/src/pages/proxies.tsx +++ b/src/renderer/src/pages/proxies.tsx @@ -62,7 +62,6 @@ const Proxies: React.FC = () => { if (autoCloseConnection) { await mihomoCloseAllConnections() } - // window.electron.ipcRenderer.send('mihomoGroupsUpdated') mutate() } diff --git a/src/renderer/src/pages/settings.tsx b/src/renderer/src/pages/settings.tsx index faae95f..f96a35f 100644 --- a/src/renderer/src/pages/settings.tsx +++ b/src/renderer/src/pages/settings.tsx @@ -195,15 +195,18 @@ const Settings: React.FC = () => { }} /> - - { - patchAppConfig({ proxyInTray: v }) - }} - /> - + {platform !== 'linux' && ( + + { + await patchAppConfig({ proxyInTray: v }) + }} + /> + + )} + {platform === 'darwin' && ( <>