From 26c1043eb2f41e50568704b543f0c3eefa41a004 Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Wed, 31 Dec 2025 12:06:10 -0700 Subject: [PATCH] add toggle native subtitles keyboard command --- src/assets/locales/en.json | 1 + .../overlays/KeyboardCommandsEditModal.tsx | 7 ++++ .../overlays/KeyboardCommandsModal.tsx | 7 ++++ .../player/internals/KeyboardEvents.tsx | 41 ++++++++++++++++++- src/utils/keyboardShortcuts.ts | 2 + 5 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index b964c8e5..35477faa 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -285,6 +285,7 @@ "randomCaption": "Select random caption from last used language", "syncSubtitlesEarlier": "Sync subtitles earlier (-0.5s)", "syncSubtitlesLater": "Sync subtitles later (+0.5s)", + "toggleNativeSubtitles": "Toggle native subtitles", "barrelRoll": "Do a barrel roll! 🌀", "closeOverlay": "Close overlay/modal", "nextEpisode": "Next episode", diff --git a/src/components/overlays/KeyboardCommandsEditModal.tsx b/src/components/overlays/KeyboardCommandsEditModal.tsx index 3d40e4c7..750042ff 100644 --- a/src/components/overlays/KeyboardCommandsEditModal.tsx +++ b/src/components/overlays/KeyboardCommandsEditModal.tsx @@ -165,6 +165,13 @@ const getShortcutGroups = ( "global.keyboardShortcuts.shortcuts.syncSubtitlesLater", ), }, + { + id: ShortcutId.TOGGLE_NATIVE_SUBTITLES, + config: shortcuts[ShortcutId.TOGGLE_NATIVE_SUBTITLES], + description: t( + "global.keyboardShortcuts.shortcuts.toggleNativeSubtitles", + ), + }, ], }, { diff --git a/src/components/overlays/KeyboardCommandsModal.tsx b/src/components/overlays/KeyboardCommandsModal.tsx index 8e93438e..aa6cd00b 100644 --- a/src/components/overlays/KeyboardCommandsModal.tsx +++ b/src/components/overlays/KeyboardCommandsModal.tsx @@ -189,6 +189,13 @@ const getShortcutGroups = ( ), config: getConfig(ShortcutId.SYNC_SUBTITLES_LATER), }, + { + key: getDisplayKey(ShortcutId.TOGGLE_NATIVE_SUBTITLES) || "S", + description: t( + "global.keyboardShortcuts.shortcuts.toggleNativeSubtitles", + ), + config: getConfig(ShortcutId.TOGGLE_NATIVE_SUBTITLES), + }, ], }, { diff --git a/src/components/player/internals/KeyboardEvents.tsx b/src/components/player/internals/KeyboardEvents.tsx index ce9a6fcc..8335f094 100644 --- a/src/components/player/internals/KeyboardEvents.tsx +++ b/src/components/player/internals/KeyboardEvents.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useRef, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { getMetaFromId } from "@/backend/metadata/getmeta"; import { MWMediaType } from "@/backend/metadata/types/mw"; @@ -14,6 +14,7 @@ import { useSubtitleStore } from "@/stores/subtitles"; import { useEmpheralVolumeStore } from "@/stores/volume"; import { useWatchPartyStore } from "@/stores/watchParty"; import { + DEFAULT_KEYBOARD_SHORTCUTS, LOCKED_SHORTCUTS, ShortcutId, matchesShortcut, @@ -49,7 +50,23 @@ export function KeyboardEvents() { (s) => s.setShowDelayIndicator, ); const enableHoldToBoost = usePreferencesStore((s) => s.enableHoldToBoost); - const keyboardShortcuts = usePreferencesStore((s) => s.keyboardShortcuts); + const storedKeyboardShortcuts = usePreferencesStore( + (s) => s.keyboardShortcuts, + ); + // Merge defaults with stored shortcuts to ensure new shortcuts are available + const keyboardShortcuts = useMemo( + () => ({ + ...DEFAULT_KEYBOARD_SHORTCUTS, + ...storedKeyboardShortcuts, + }), + [storedKeyboardShortcuts], + ); + const enableNativeSubtitles = usePreferencesStore( + (s) => s.enableNativeSubtitles, + ); + const setEnableNativeSubtitles = usePreferencesStore( + (s) => s.setEnableNativeSubtitles, + ); const [isRolling, setIsRolling] = useState(false); const volumeDebounce = useRef | undefined>(); @@ -295,6 +312,8 @@ export function KeyboardEvents() { navigateToNextEpisode, navigateToPreviousEpisode, keyboardShortcuts, + enableNativeSubtitles, + setEnableNativeSubtitles, }); useEffect(() => { @@ -329,6 +348,8 @@ export function KeyboardEvents() { navigateToNextEpisode, navigateToPreviousEpisode, keyboardShortcuts, + enableNativeSubtitles, + setEnableNativeSubtitles, }; }, [ setShowVolume, @@ -356,6 +377,8 @@ export function KeyboardEvents() { navigateToNextEpisode, navigateToPreviousEpisode, keyboardShortcuts, + enableNativeSubtitles, + setEnableNativeSubtitles, ]); useEffect(() => { @@ -725,6 +748,20 @@ export function KeyboardEvents() { dataRef.current.setCurrentOverlay(null); }, 3000); } + + // Toggle native subtitles - customizable + const toggleNativeSubtitles = + dataRef.current.keyboardShortcuts[ShortcutId.TOGGLE_NATIVE_SUBTITLES]; + if ( + toggleNativeSubtitles?.key && + matchesShortcut(evt, toggleNativeSubtitles) + ) { + evt.preventDefault(); + evt.stopPropagation(); + dataRef.current.setEnableNativeSubtitles( + !dataRef.current.enableNativeSubtitles, + ); + } }; const keyupEventHandler = (evt: KeyboardEvent) => { diff --git a/src/utils/keyboardShortcuts.ts b/src/utils/keyboardShortcuts.ts index 543bd7c3..250a7bc6 100644 --- a/src/utils/keyboardShortcuts.ts +++ b/src/utils/keyboardShortcuts.ts @@ -40,6 +40,7 @@ export enum ShortcutId { RANDOM_CAPTION = "randomCaption", SYNC_SUBTITLES_EARLIER = "syncSubtitlesEarlier", SYNC_SUBTITLES_LATER = "syncSubtitlesLater", + TOGGLE_NATIVE_SUBTITLES = "toggleNativeSubtitles", // Interface BARREL_ROLL = "barrelRoll", @@ -67,6 +68,7 @@ export const DEFAULT_KEYBOARD_SHORTCUTS: KeyboardShortcuts = { [ShortcutId.RANDOM_CAPTION]: { modifier: "Shift", key: "C" }, [ShortcutId.SYNC_SUBTITLES_EARLIER]: { key: "[" }, [ShortcutId.SYNC_SUBTITLES_LATER]: { key: "]" }, + [ShortcutId.TOGGLE_NATIVE_SUBTITLES]: { key: "S" }, [ShortcutId.BARREL_ROLL]: { key: "R" }, };