diff --git a/ui/autoMate/src/main/db/tables.ts b/ui/autoMate/src/main/db/tables.ts index 1c77d1d..214462e 100644 --- a/ui/autoMate/src/main/db/tables.ts +++ b/ui/autoMate/src/main/db/tables.ts @@ -33,7 +33,7 @@ CREATE TABLE IF NOT EXISTS config ( function initData() { const initData = findOne('select * from config') if (initData) return - db.exec(`insert into config (content) values('')`) + db.exec(`insert into config (id, content) values(1,'{"shortCut":"Alt+Space","databaseDirectory":""}')`) } diff --git a/ui/autoMate/src/main/shortCut.ts b/ui/autoMate/src/main/shortCut.ts index 916c507..311f866 100644 --- a/ui/autoMate/src/main/shortCut.ts +++ b/ui/autoMate/src/main/shortCut.ts @@ -1,25 +1,24 @@ -import { BrowserWindow, IpcMainInvokeEvent } from "electron" +import { IpcMainInvokeEvent } from "electron" import { ipcMain } from "electron" import { getWindowByName } from "./windows" +import { findOne } from "./db/query" const { app, globalShortcut } = require('electron') -const config = { - search: "" -} +ipcMain.handle("shortCut", (_event: IpcMainInvokeEvent, type) => { - -ipcMain.handle("shortCut", (_event: IpcMainInvokeEvent, type: 'search', shortCut: string) => { // react 严格模式会执行两次,可能会导致快捷键重复注册,这里在注册前会删除旧快捷键,也用户注册过快捷键想修改成其他快捷键 - if (config.search) globalShortcut.unregister(config.search) - config.search = shortCut - switch(type){ - case 'search': - return registerSearchShortCut(getWindowByName('search'), shortCut) - } + return registerSearchShortCut( ) + }) -function registerSearchShortCut(win: BrowserWindow, shortCut: string){ +function registerSearchShortCut(){ + const ret = findOne(`select * from config where id=1`) as {content: string} + const shortCut = JSON.parse(ret.content).shortCut as string + if (globalShortcut.isRegistered(shortCut)){ + globalShortcut.unregister(shortCut) + } + const win = getWindowByName('search') const res = globalShortcut.register(shortCut, () => { win.isVisible() ? win.hide() : win.show() }) diff --git a/ui/autoMate/src/main/windows.ts b/ui/autoMate/src/main/windows.ts index 1b30f5f..1cc5827 100644 --- a/ui/autoMate/src/main/windows.ts +++ b/ui/autoMate/src/main/windows.ts @@ -43,6 +43,6 @@ export const getWindowByEvent = (event: IpcMainEvent | IpcMainInvokeEvent) => { app.whenReady().then(() => { - // getWindowByName('search') + getWindowByName('search') getWindowByName('config') }) \ No newline at end of file diff --git a/ui/autoMate/src/preload/index.d.ts b/ui/autoMate/src/preload/index.d.ts index 211bfbb..4c4881b 100644 --- a/ui/autoMate/src/preload/index.d.ts +++ b/ui/autoMate/src/preload/index.d.ts @@ -4,7 +4,7 @@ declare global { interface Window { electron: ElectronAPI api: { - shortCut: (type: 'search', shortCut: string) => Promise, + shortCut: () => Promise, setIgnoreMouseEvents: (ignore: boolean, options?: { forward: boolean }) => void, openConfigWindow: () => void, sql: (sql: string, type: SqlActionType, params?: Record) => Promise diff --git a/ui/autoMate/src/preload/index.ts b/ui/autoMate/src/preload/index.ts index 1979378..5a5879b 100644 --- a/ui/autoMate/src/preload/index.ts +++ b/ui/autoMate/src/preload/index.ts @@ -3,8 +3,8 @@ import { electronAPI } from '@electron-toolkit/preload' // Custom APIs for renderer const api = { - shortCut: (type: 'search', shortCut: string) => { - return ipcRenderer.invoke("shortCut", type, shortCut) + shortCut: () => { + return ipcRenderer.invoke("shortCut") }, setIgnoreMouseEvents: (ignore: boolean, options?: { forward: boolean }) => { ipcRenderer.send("setIgnoreMouseEvents", ignore, options) diff --git a/ui/autoMate/src/renderer/src/hooks/useShortCut.ts b/ui/autoMate/src/renderer/src/hooks/useShortCut.ts index 496483a..43f4bf0 100644 --- a/ui/autoMate/src/renderer/src/hooks/useShortCut.ts +++ b/ui/autoMate/src/renderer/src/hooks/useShortCut.ts @@ -2,8 +2,8 @@ import { useStore } from "@renderer/store/useStore" export default() => { const setError = useStore(state => state.setError) - const register = async (type: 'search', shortCut: string)=>{ - const ret = await window.api.shortCut(type, shortCut) + const register = async ()=>{ + const ret = await window.api.shortCut() ret || setError("注册失败") } diff --git a/ui/autoMate/src/renderer/src/layouts/Home/index.tsx b/ui/autoMate/src/renderer/src/layouts/Home/index.tsx index 48f8453..adecaf0 100644 --- a/ui/autoMate/src/renderer/src/layouts/Home/index.tsx +++ b/ui/autoMate/src/renderer/src/layouts/Home/index.tsx @@ -16,8 +16,8 @@ function Home(): JSX.Element { // window.api.openConfigWindow() }, []) // 注册快捷键 - // const shortCut = useShortCut() - // shortCut.register("search", "CommandOrControl+n") + const shortCut = useShortCut() + shortCut.register() return (
diff --git a/ui/autoMate/src/renderer/src/pages/Setting/index.tsx b/ui/autoMate/src/renderer/src/pages/Setting/index.tsx index b5e2c96..1186083 100644 --- a/ui/autoMate/src/renderer/src/pages/Setting/index.tsx +++ b/ui/autoMate/src/renderer/src/pages/Setting/index.tsx @@ -1,29 +1,41 @@ import { Form, useLoaderData, useSubmit } from 'react-router-dom' import styles from './styles.module.scss' +import { useState } from 'react' export const Setting = () => { const config = useLoaderData() as ConfigDataType const submit = useSubmit() + const [keys, setKeys] = useState([]) return (
-
-

Setting

-
-
快捷键定义
- { - submit(e.currentTarget.form, {method: 'POST'}) - }} - /> -
-
-
数据库
- -
-
+
+

Setting

+
+
快捷键定义
+ { + if (e.metaKey || e.ctrlKey || e.altKey) { + keys.push(e.code.replace(/Left|Right|Key|Digit/, '')) + setKeys(keys) + e.currentTarget.value = keys.join('+') + } + + }} + onKeyUp={(e) => { + submit(e.currentTarget.form, {method: 'POST'}) + setKeys([]) + }} + /> +
+
+
数据库
+ +
+
) } \ No newline at end of file