diff --git a/src/main/events/remotes/menu.ts b/src/main/events/remotes/menu.ts index 9737adc..16fb472 100644 --- a/src/main/events/remotes/menu.ts +++ b/src/main/events/remotes/menu.ts @@ -14,13 +14,17 @@ import picgoCoreIPC from '~/main/events/picgoCoreIPC' import { PicGo as PicGoCore } from 'piclist' import { T } from '~/main/i18n' import { changeCurrentUploader } from '~/main/utils/handleUploaderConfig' - +import db from '~/main/apis/core/datastore' +import clipboardListener from 'clipboard-event' +import clipboardPoll from '~/main/utils/clipboardPoll' interface GuiMenuItem { label: string handle: (arg0: PicGoCore, arg1: GuiApi) => Promise } const buildMiniPageMenu = () => { + const isListeningClipboard = db.get('settings.isListeningClipboard') || false + const ClipboardWatcher = process.platform === 'win32' ? clipboardListener : clipboardPoll const submenu = buildPicBedListMenu() const template = [ { @@ -49,6 +53,29 @@ const buildMiniPageMenu = () => { BrowserWindow.getFocusedWindow()!.hide() } }, + { + label: T('START_WATCH_CLIPBOARD'), + click () { + db.set('settings.isListeningClipboard', true) + ClipboardWatcher.startListening() + ClipboardWatcher.on('change', () => { + picgo.log.info('clipboard changed') + uploadClipboardFiles() + }) + buildMiniPageMenu() + }, + enabled: !isListeningClipboard + }, + { + label: T('STOP_WATCH_CLIPBOARD'), + click () { + db.set('settings.isListeningClipboard', false) + ClipboardWatcher.stopListening() + ClipboardWatcher.removeAllListeners() + buildMiniPageMenu() + }, + enabled: isListeningClipboard + }, { label: T('RELOAD_APP'), click () { diff --git a/src/renderer/pages/TrayPage.vue b/src/renderer/pages/TrayPage.vue index a9f3856..b5be223 100644 --- a/src/renderer/pages/TrayPage.vue +++ b/src/renderer/pages/TrayPage.vue @@ -70,7 +70,6 @@ import { IResult } from '@picgo/store/dist/types' import { OPEN_WINDOW } from '#/events/constants' import { IPasteStyle, IWindowList } from '#/types/enum' import { getConfig, sendToMain } from '@/utils/dataSender' -import { formatCustomLink } from '~/main/utils/pasteTemplate' import { handleUrlEncode } from '#/utils/common' const files = ref[]>([]) @@ -92,6 +91,25 @@ async function getData () { files.value = (await $$db.get({ orderBy: 'desc', limit: 5 })).data } +const formatCustomLink = (customLink: string, item: ImgInfo) => { + const fileName = item.fileName!.replace(new RegExp(`\\${item.extname}$`), '') + const url = item.url || item.imgUrl + const extName = item.extname + const formatObj = { + url, + fileName, + extName + } + const keys = Object.keys(formatObj) as ['url', 'fileName', 'extName'] + keys.forEach(item => { + if (customLink.indexOf(`$${item}`) !== -1) { + const reg = new RegExp(`\\$${item}`, 'g') + customLink = customLink.replace(reg, formatObj[item]) + } + }) + return customLink +} + async function copyTheLink (item: ImgInfo) { notification.body = item.imgUrl! const pasteStyle = await getConfig('settings.pasteStyle') || IPasteStyle.MARKDOWN