feat: add tray proxy group style option with submenu mode

This commit is contained in:
Memory 2025-12-20 00:33:51 +08:00 committed by GitHub
parent 51d169d2e8
commit b7d6ea8e7a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 68 additions and 13 deletions

View File

@ -59,6 +59,7 @@ export const buildContextMenu = async (): Promise<Menu> => {
autoCloseConnection,
proxyInTray = true,
showCurrentProxyInTray = false,
trayProxyGroupStyle = 'default',
triggerSysProxyShortcut = '',
showFloatingWindowShortcut = '',
showWindowShortcut = '',
@ -73,13 +74,13 @@ export const buildContextMenu = async (): Promise<Menu> => {
if (proxyInTray && process.platform !== 'linux') {
try {
const groups = await mihomoGroups()
groupsMenu = groups.map((group) => {
const groupItems: Electron.MenuItemConstructorOptions[] = groups.map((group) => {
const groupLabel = showCurrentProxyInTray ? `${group.name} | ${group.now}` : group.name
return {
id: group.name,
label: groupLabel,
type: 'submenu',
type: 'submenu' as const,
submenu: group.all.map((proxy) => {
const delay = proxy.history.length ? proxy.history[proxy.history.length - 1].delay : -1
let displayDelay = `(${delay}ms)`
@ -92,7 +93,7 @@ export const buildContextMenu = async (): Promise<Menu> => {
return {
id: proxy.name,
label: `${proxy.name} ${displayDelay}`,
type: 'radio',
type: 'radio' as const,
checked: proxy.name === group.now,
click: async (): Promise<void> => {
await mihomoChangeProxy(group.name, proxy.name)
@ -104,7 +105,21 @@ export const buildContextMenu = async (): Promise<Menu> => {
})
}
})
if (trayProxyGroupStyle === 'submenu') {
groupsMenu = [
{ type: 'separator' },
{
id: 'proxy-groups',
label: t('tray.proxyGroups'),
type: 'submenu',
submenu: groupItems
}
]
} else {
groupsMenu = groupItems
groupsMenu.unshift({ type: 'separator' })
}
} catch (e) {
// ignore
// 避免出错时无法创建托盘菜单

View File

@ -10,6 +10,7 @@ export const defaultConfig: IAppConfig = {
useWindowFrame: false,
proxyInTray: true,
showCurrentProxyInTray: false,
trayProxyGroupStyle: 'default',
disableTrayIconColor: false,
maxLogDays: 7,
proxyCols: 'auto',

View File

@ -51,6 +51,7 @@ const GeneralConfig: React.FC = () => {
showTraffic = false,
proxyInTray = true,
showCurrentProxyInTray = false,
trayProxyGroupStyle = 'default',
disableTray = false,
swapTrayClick = false,
disableTrayIconColor = false,
@ -360,6 +361,7 @@ const GeneralConfig: React.FC = () => {
/>
</SettingItem>
{proxyInTray && (
<>
<SettingItem title={t('settings.showCurrentProxyInTray')} divider>
<Switch
size="sm"
@ -369,6 +371,20 @@ const GeneralConfig: React.FC = () => {
}}
/>
</SettingItem>
<SettingItem title={t('settings.trayProxyGroupStyle')} divider>
<Tabs
size="sm"
color="primary"
selectedKey={trayProxyGroupStyle}
onSelectionChange={(key) => {
patchAppConfig({ trayProxyGroupStyle: key as 'default' | 'submenu' })
}}
>
<Tab key="default" title={t('settings.trayProxyGroupStyleDefault')} />
<Tab key="submenu" title={t('settings.trayProxyGroupStyleSubmenu')} />
</Tabs>
</SettingItem>
</>
)}
<SettingItem
title={t('settings.showTraffic', {

View File

@ -68,6 +68,9 @@
"settings.swapTrayClick": "Swap Tray Left/Right Click",
"settings.proxyInTray": "Show Proxy Info in Tray Menu",
"settings.showCurrentProxyInTray": "Show Current Proxy in Tray Menu",
"settings.trayProxyGroupStyle": "Tray Proxy Group Style",
"settings.trayProxyGroupStyleDefault": "Default",
"settings.trayProxyGroupStyleSubmenu": "Submenu",
"settings.disableTrayIconColor": "Disable Tray Icon Color Changes",
"settings.disableAnimations": "Disable Animation Effects",
"settings.showTraffic_windows": "Show Network Speed in Taskbar",
@ -596,6 +599,7 @@
"tray.systemProxy": "System Proxy",
"tray.tun": "TUN",
"tray.profiles": "Profiles",
"tray.proxyGroups": "Proxy Groups",
"tray.openDirectories.title": "Open Directories",
"tray.openDirectories.appDir": "App Directory",
"tray.openDirectories.workDir": "Work Directory",

View File

@ -63,6 +63,10 @@
"settings.disableTray": "غیرفعال کردن آیکون سیستم‌تری",
"settings.swapTrayClick": "تعویض کلیک چپ/راست تری",
"settings.proxyInTray": "نمایش اطلاعات پراکسی در منوی سیستم‌تری",
"settings.showCurrentProxyInTray": "نمایش پراکسی فعلی در منوی تری",
"settings.trayProxyGroupStyle": "سبک گروه پراکسی در تری",
"settings.trayProxyGroupStyleDefault": "پیش‌فرض",
"settings.trayProxyGroupStyleSubmenu": "زیرمنو",
"settings.disableTrayIconColor": "غیرفعال کردن تغییر رنگ آیکون تری",
"settings.disableAnimations": "غیرفعال کردن جلوه‌های انیمیشن",
"settings.showTraffic_windows": "نمایش سرعت شبکه در نوار وظیفه",
@ -560,6 +564,7 @@
"tray.systemProxy": "پراکسی سیستم",
"tray.tun": "TUN",
"tray.profiles": "پروفایل‌ها",
"tray.proxyGroups": "گروه‌های پراکسی",
"tray.openDirectories.title": "باز کردن پوشه‌ها",
"tray.openDirectories.appDir": "پوشه برنامه",
"tray.openDirectories.workDir": "پوشه کاری",

View File

@ -63,6 +63,10 @@
"settings.disableTray": "Отключить значок в трее",
"settings.swapTrayClick": "Поменять местами левый/правый клик в трее",
"settings.proxyInTray": "Показывать информацию о прокси в трее",
"settings.showCurrentProxyInTray": "Показывать текущий прокси в трее",
"settings.trayProxyGroupStyle": "Стиль групп прокси в трее",
"settings.trayProxyGroupStyleDefault": "По умолчанию",
"settings.trayProxyGroupStyleSubmenu": "Подменю",
"settings.disableTrayIconColor": "Отключить смену цвета значка в трее",
"settings.disableAnimations": "Отключить анимационные эффекты",
"settings.showTraffic_windows": "Показывать скорость в панели задач",
@ -560,6 +564,7 @@
"tray.systemProxy": "Системный прокси",
"tray.tun": "TUN",
"tray.profiles": "Профили",
"tray.proxyGroups": "Группы прокси",
"tray.openDirectories.title": "Открыть директории",
"tray.openDirectories.appDir": "Директория приложения",
"tray.openDirectories.workDir": "Рабочая директория",

View File

@ -68,6 +68,9 @@
"settings.swapTrayClick": "交换托盘左右键功能",
"settings.proxyInTray": "在托盘菜单显示代理信息",
"settings.showCurrentProxyInTray": "托盘菜单显示当前代理",
"settings.trayProxyGroupStyle": "托盘代理组样式",
"settings.trayProxyGroupStyleDefault": "默认",
"settings.trayProxyGroupStyleSubmenu": "子菜单",
"settings.disableTrayIconColor": "禁用托盘图标颜色变化",
"settings.disableAnimations": "禁用动画效果",
"settings.showTraffic_windows": "在任务栏显示网速",
@ -596,6 +599,7 @@
"tray.systemProxy": "系统代理",
"tray.tun": "虚拟网卡",
"tray.profiles": "订阅配置",
"tray.proxyGroups": "代理分组",
"tray.openDirectories.title": "打开目录",
"tray.openDirectories.appDir": "应用目录",
"tray.openDirectories.workDir": "工作目录",

View File

@ -68,6 +68,9 @@
"settings.swapTrayClick": "交換托盤左右鍵功能",
"settings.proxyInTray": "在托盤菜單顯示代理信息",
"settings.showCurrentProxyInTray": "托盤菜單顯示當前代理",
"settings.trayProxyGroupStyle": "托盤代理組樣式",
"settings.trayProxyGroupStyleDefault": "默認",
"settings.trayProxyGroupStyleSubmenu": "子菜單",
"settings.disableTrayIconColor": "禁用托盤圖標顏色變化",
"settings.disableAnimations": "禁用動畫效果",
"settings.showTraffic_windows": "在任务列顯示網速",
@ -596,6 +599,7 @@
"tray.systemProxy": "系統代理",
"tray.tun": "虛擬網卡",
"tray.profiles": "訂閱配置",
"tray.proxyGroups": "代理分組",
"tray.openDirectories.title": "打開目錄",
"tray.openDirectories.appDir": "應用目錄",
"tray.openDirectories.workDir": "工作目錄",

View File

@ -295,6 +295,7 @@ interface IAppConfig {
useDockIcon?: boolean
showTraffic?: boolean
disableTrayIconColor?: boolean
trayProxyGroupStyle?: 'default' | 'submenu'
disableAnimations?: boolean
webdavUrl?: string
webdavDir?: string