From 448ece4e7d65761a20d9bfefbefeac593c5b6975 Mon Sep 17 00:00:00 2001 From: an-lee Date: Fri, 14 Jun 2024 10:55:32 +0800 Subject: [PATCH] refactor hotkey setting & add `A` hotkey (#676) --- enjoy/src/i18n/en.json | 2 +- enjoy/src/i18n/zh-CN.json | 2 +- .../medias/media-current-recording.tsx | 16 +++++++++--- .../preferences/hotkeys-settings.tsx | 25 +++++++++++-------- .../components/preferences/hotkeys.tsx | 25 ++++++++++++++++--- .../context/hotkeys-settings-provider.tsx | 15 +++++------ 6 files changed, 59 insertions(+), 26 deletions(-) diff --git a/enjoy/src/i18n/en.json b/enjoy/src/i18n/en.json index 4057796a..61a9d35a 100644 --- a/enjoy/src/i18n/en.json +++ b/enjoy/src/i18n/en.json @@ -565,7 +565,7 @@ "customizeShortcuts": "Customize shortcuts", "customizeShortcutsTip": "Click to change", "customizeShortcutsRecordingTip": "Recording new shortcut", - "customizeShortcutsInvalidToast": "Your shortcut should only have one modifier (Ctrl, Alt, Shift, or Meta) and one key, like 'Ctrl+C'.", + "customizeShortcutsInvalidToast": "Your shortcut should have two modifier (Ctrl, Alt, Shift, or Meta) at most and one regular key, like 'Ctrl+C'.", "customizeShortcutsConflictToast": "{{input}} conflicts with the existing {{otherHotkeyName}} shortcut.", "customizeShortcutsUpdated": "Changes saved", "following": "following", diff --git a/enjoy/src/i18n/zh-CN.json b/enjoy/src/i18n/zh-CN.json index 13500c34..2357f331 100644 --- a/enjoy/src/i18n/zh-CN.json +++ b/enjoy/src/i18n/zh-CN.json @@ -565,7 +565,7 @@ "customizeShortcuts": "自定义快捷键", "customizeShortcutsTip": "点击重新录制", "customizeShortcutsRecordingTip": "正在录制快捷键", - "customizeShortcutsInvalidToast": "快捷键应最多含一个修饰键(Ctrl, Alt, Shift 或 Meta)和一个键,如 'Ctrl+C'", + "customizeShortcutsInvalidToast": "快捷键应含最多两个修饰键(Ctrl, Alt, Shift 或 Meta)和一个普通键,如 'Ctrl+C'", "customizeShortcutsConflictToast": "{{input}} 和已有 {{otherHotkeyName}} 的键位冲突了", "customizeShortcutsUpdated": "设置成功", "following": "关注中", diff --git a/enjoy/src/renderer/components/medias/media-current-recording.tsx b/enjoy/src/renderer/components/medias/media-current-recording.tsx index faf0ebd1..78ffa416 100644 --- a/enjoy/src/renderer/components/medias/media-current-recording.tsx +++ b/enjoy/src/renderer/components/medias/media-current-recording.tsx @@ -422,12 +422,22 @@ export const MediaCurrentRecording = () => { }, [currentRecording, isRecording, layout?.width]); useHotkeys( - currentHotkeys.PlayOrPauseRecording, - (keyboardEvent, _hotkeyEvent) => { + [ + currentHotkeys.PlayOrPauseRecording, + currentHotkeys.PronunciationAssessment, + ], + (keyboardEvent, hotkeyEvent) => { if (!player) return; keyboardEvent.preventDefault(); - document.getElementById("recording-play-or-pause-button").click(); + switch (hotkeyEvent.keys.join("")) { + case currentHotkeys.PlayOrPauseRecording.toLowerCase(): + document.getElementById("recording-play-or-pause-button").click(); + break; + case currentHotkeys.PronunciationAssessment.toLowerCase(): + setDetailIsOpen(!detailIsOpen); + break; + } }, { enabled }, [player] diff --git a/enjoy/src/renderer/components/preferences/hotkeys-settings.tsx b/enjoy/src/renderer/components/preferences/hotkeys-settings.tsx index 4352c6ac..47918aa6 100644 --- a/enjoy/src/renderer/components/preferences/hotkeys-settings.tsx +++ b/enjoy/src/renderer/components/preferences/hotkeys-settings.tsx @@ -33,10 +33,20 @@ export const HotkeysSettings = ({ isRecording, } = useContext(HotKeysSettingsProviderContext); - const joinedKeys = useMemo( - () => [...recordingHotkeys].join("+"), - [recordingHotkeys] - ); + const reset = () => { + stopRecordingHotkeys(); + resetRecordingHotkeys(); + }; + + const joinedKeys = useMemo(() => { + const keys = [...recordingHotkeys].join("+").split("+"); + if (keys?.length > 3) { + reset(); + return ""; + } else { + return keys.join("+"); + } + }, [recordingHotkeys]); const changeKeyMap = async () => { const ret = (await changeHotkey(keyName, recordingHotkeys)) as unknown as { @@ -64,11 +74,6 @@ export const HotkeysSettings = ({ } }; - const reset = () => { - stopRecordingHotkeys(); - resetRecordingHotkeys(); - }; - // ensure recording disabled when dialog close useEffect(() => { return () => { @@ -87,7 +92,7 @@ export const HotkeysSettings = ({