Files
Easytier_lkddi/easytier-gui/src/composables/tray.ts
T

100 lines
2.4 KiB
TypeScript
Raw Normal View History

2024-08-07 21:27:38 +08:00
import { getCurrentWindow } from '@tauri-apps/api/window'
2024-07-08 23:18:10 +08:00
import { Menu, MenuItem, PredefinedMenuItem } from '@tauri-apps/api/menu'
import { TrayIcon } from '@tauri-apps/api/tray'
import pkg from '~/../package.json'
const DEFAULT_TRAY_NAME = 'main'
async function toggleVisibility() {
2024-08-07 21:27:38 +08:00
if (await getCurrentWindow().isVisible()) {
await getCurrentWindow().hide()
2024-07-08 23:18:10 +08:00
} else {
2024-08-07 21:27:38 +08:00
await getCurrentWindow().show()
await getCurrentWindow().setFocus()
2024-07-08 23:18:10 +08:00
}
}
export async function useTray(init: boolean = false) {
2024-07-15 00:03:55 +08:00
let tray;
try {
tray = await TrayIcon.getById(DEFAULT_TRAY_NAME)
if (!tray) {
tray = await TrayIcon.new({
tooltip: `EasyTier\n${pkg.version}`,
title: `EasyTier\n${pkg.version}`,
id: DEFAULT_TRAY_NAME,
menu: await Menu.new({
id: 'main',
items: await generateMenuItem(),
}),
action: async () => {
toggleVisibility()
}
})
}
} catch (error) {
console.warn('Error while creating tray icon:', error)
return null
2024-07-08 23:18:10 +08:00
}
if (init) {
tray.setTooltip(`EasyTier\n${pkg.version}`)
tray.setMenuOnLeftClick(false);
tray.setMenu(await Menu.new({
id: 'main',
items: await generateMenuItem(),
}))
}
return tray
}
export async function generateMenuItem() {
return [
await MenuItemExit('Exit'),
await PredefinedMenuItem.new({ item: 'Separator' }),
await MenuItemShow('Show / Hide'),
2024-08-07 21:27:38 +08:00
]
2024-07-08 23:18:10 +08:00
}
export async function MenuItemExit(text: string) {
return await PredefinedMenuItem.new({
text: text,
item: 'Quit',
})
}
export async function MenuItemShow(text: string) {
return await MenuItem.new({
id: 'show',
text,
action: async () => {
2024-07-15 00:03:55 +08:00
await toggleVisibility();
2024-07-08 23:18:10 +08:00
},
})
}
export async function setTrayMenu(items: (MenuItem | PredefinedMenuItem)[] | undefined = undefined) {
const tray = await useTray()
2024-07-15 00:03:55 +08:00
if (!tray) return
2024-07-08 23:18:10 +08:00
const menu = await Menu.new({
id: 'main',
items: items || await generateMenuItem(),
})
tray.setMenu(menu)
}
export async function setTrayRunState(isRunning: boolean = false) {
const tray = await useTray()
2024-07-15 00:03:55 +08:00
if (!tray) return
2024-07-08 23:18:10 +08:00
tray.setIcon(isRunning ? 'icons/icon-inactive.ico' : 'icons/icon.ico')
}
export async function setTrayTooltip(tooltip: string) {
if (tooltip) {
const tray = await useTray()
2024-07-15 00:03:55 +08:00
if (!tray) return
2024-07-08 23:18:10 +08:00
tray.setTooltip(`EasyTier\n${pkg.version}\n${tooltip}`)
tray.setTitle(`EasyTier\n${pkg.version}\n${tooltip}`)
}
}