diff --git a/src/main/apis/app/system/index.ts b/src/main/apis/app/system/index.ts index 5123c97..829ba59 100644 --- a/src/main/apis/app/system/index.ts +++ b/src/main/apis/app/system/index.ts @@ -21,7 +21,7 @@ import windowManager from 'apis/app/window/windowManager' import { IPasteStyle, IWindowList } from '#/types/enum' import pasteTemplate from '~/main/utils/pasteTemplate' import pkg from 'root/package.json' -import { ensureFilePath, handleCopyUrl } from '~/main/utils/common' +import { ensureFilePath, handleCopyUrl, setTray, tray } from '~/main/utils/common' import { T } from '~/main/i18n' import { isMacOSVersionGreaterThanOrEqualTo } from '~/main/utils/getMacOSVersion' import { buildPicBedListMenu } from '~/main/events/remotes/menu' @@ -31,7 +31,6 @@ import { uploadClipboardFiles } from '../uploader/apis' import { configPaths } from '~/universal/utils/configPaths' let contextMenu: Menu | null -let tray: Tray | null export function setDockMenu () { const isListeningClipboard = db.get(configPaths.settings.isListeningClipboard) || false @@ -336,9 +335,10 @@ const getTrayIcon = () => { } } -export function createTray () { +export function createTray (tooltip: string) { const menubarPic = getTrayIcon() - tray = new Tray(menubarPic) + setTray(new Tray(menubarPic)) + tray.setToolTip(tooltip) // click事件在Mac和Windows上可以触发(在Ubuntu上无法触发,Unity不支持) if (process.platform === 'darwin' || process.platform === 'win32') { tray.on('right-click', () => { @@ -348,7 +348,7 @@ export function createTray () { createContextMenu() tray!.popUpContextMenu(contextMenu!) }) - tray.on('click', (event, bounds) => { + tray.on('click', (_, bounds) => { if (process.platform === 'darwin') { toggleWindow(bounds) setTimeout(async () => { @@ -412,7 +412,7 @@ export function createTray () { // drop-files only be supported in macOS // so the tray window must be available - tray.on('drop-files', async (event: Event, files: string[]) => { + tray.on('drop-files', async (_: Event, files: string[]) => { const pasteStyle = db.get(configPaths.settings.pasteStyle) || IPasteStyle.MARKDOWN const rawInput = cloneDeep(files) const trayWindow = windowManager.get(IWindowList.TRAY_WINDOW)! diff --git a/src/main/events/ipcList.ts b/src/main/events/ipcList.ts index d00fd5c..e961d96 100644 --- a/src/main/events/ipcList.ts +++ b/src/main/events/ipcList.ts @@ -68,7 +68,7 @@ import { import picgoCoreIPC from './picgoCoreIPC' // 处理复制的 URL 和生成短链接的函数 -import { handleCopyUrl, generateShortUrl } from '~/main/utils/common' +import { handleCopyUrl, generateShortUrl, setTrayToolTip } from '~/main/utils/common' // 构建主页面、迷你页面、插件页面、图片床列表的菜单函数 import { buildMainPageMenu, buildMiniPageMenu, buildPluginPageMenu, buildPicBedListMenu } from './remotes/menu' @@ -136,6 +136,10 @@ export default { return uploadChoosedFiles(evt.sender, files) }) + ipcMain.on('setTrayToolTip', (_: IpcMainEvent, title: string) => { + setTrayToolTip(title) + }) + // ShortKey Related IPC ipcMain.on('updateShortKey', (evt: IpcMainEvent, item: IShortKeyConfig, oldKey: string, from: string) => { const result = shortKeyHandler.updateShortKey(item, oldKey, from) diff --git a/src/main/events/remotes/menu.ts b/src/main/events/remotes/menu.ts index 3ad18f2..c6a6bc8 100644 --- a/src/main/events/remotes/menu.ts +++ b/src/main/events/remotes/menu.ts @@ -31,6 +31,7 @@ import { import { PicGo as PicGoCore } from 'piclist' import { T } from '~/main/i18n' import { configPaths } from '~/universal/utils/configPaths' +import { setTrayToolTip } from '~/main/utils/common' interface GuiMenuItem { label: string @@ -185,6 +186,7 @@ const buildPicBedListMenu = () => { if (windowManager.has(IWindowList.SETTING_WINDOW)) { windowManager.get(IWindowList.SETTING_WINDOW)!.webContents.send('syncPicBed') } + setTrayToolTip(`${item.type} ${config._configName || 'Default'}`) } } }) @@ -198,6 +200,7 @@ const buildPicBedListMenu = () => { if (windowManager.has(IWindowList.SETTING_WINDOW)) { windowManager.get(IWindowList.SETTING_WINDOW)!.webContents.send('syncPicBed') } + setTrayToolTip(item.type) } : undefined } diff --git a/src/main/lifeCycle/index.ts b/src/main/lifeCycle/index.ts index bd72260..49c35a9 100644 --- a/src/main/lifeCycle/index.ts +++ b/src/main/lifeCycle/index.ts @@ -167,11 +167,15 @@ class LifeCycle { } const isHideDock = db.get(configPaths.settings.isHideDock) || false const startMode = db.get(configPaths.settings.startMode) || ISartMode.QUIET + const currentPicBed = db.get(configPaths.picBed.uploader) || db.get(configPaths.picBed.current) || 'smms' + // @ts-ignore + const currentPicBedConfig = db.get(`picBed.${currentPicBed}`)?._configName || 'Default' + const tooltip = `${currentPicBed} ${currentPicBedConfig}` if (process.platform === 'darwin') { isHideDock ? app.dock.hide() : setDockMenu() - startMode !== ISartMode.NO_TRAY && createTray() + startMode !== ISartMode.NO_TRAY && createTray(tooltip) } else { - createTray() + createTray(tooltip) } db.set(configPaths.needReload, false) updateChecker() diff --git a/src/main/utils/common.ts b/src/main/utils/common.ts index 8f200e4..5703582 100644 --- a/src/main/utils/common.ts +++ b/src/main/utils/common.ts @@ -1,6 +1,6 @@ import fs from 'fs-extra' import db from '~/main/apis/core/datastore' -import { clipboard, Notification, dialog } from 'electron' +import { clipboard, Notification, dialog, Tray } from 'electron' import { handleUrlEncode } from '~/universal/utils/common' import axios from 'axios' import FormData from 'form-data' @@ -8,6 +8,18 @@ import logger from '../apis/core/picgo/logger' import { configPaths } from '~/universal/utils/configPaths' import { IShortUrlServer } from '~/universal/types/enum' +export let tray: Tray + +export const setTray = (t: Tray) => { tray = t } + +export const getTray = () => tray + +export function setTrayToolTip (title: string): void { + if (tray) { + tray.setToolTip(title) + } +} + export const handleCopyUrl = (str: string): void => { if (db.get(configPaths.settings.autoCopy) !== false) { clipboard.writeText(str) diff --git a/src/main/utils/handleUploaderConfig.ts b/src/main/utils/handleUploaderConfig.ts index eb24f7e..da17db9 100644 --- a/src/main/utils/handleUploaderConfig.ts +++ b/src/main/utils/handleUploaderConfig.ts @@ -2,6 +2,7 @@ import { v4 as uuid } from 'uuid' import { trimValues } from '#/utils/common' import picgo from '@core/picgo' import { configPaths } from '~/universal/utils/configPaths' +import { setTrayToolTip } from './common' export const handleConfigWithFunction = (config: IPicGoPluginOriginConfig[]): IPicGoPluginConfig[] => { for (const i in config) { @@ -65,6 +66,7 @@ export const changeCurrentUploader = (type: string, config?: IStringKeyMap, id?: [configPaths.picBed.current]: type, [configPaths.picBed.uploader]: type }) + setTrayToolTip(`${type} ${config?._configName || ''}`) } export const selectUploaderConfig = (type: string, id: string) => { diff --git a/src/renderer/pages/Plugin.vue b/src/renderer/pages/Plugin.vue index 95f275b..12cc98d 100644 --- a/src/renderer/pages/Plugin.vue +++ b/src/renderer/pages/Plugin.vue @@ -228,28 +228,15 @@