83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
import { useSrtPlayerStore } from "../stores/srtPlayerStore";
|
|
|
|
export function useSrtPlayerShortcuts(enabled: boolean = true) {
|
|
const togglePlayPause = useSrtPlayerStore((state) => state.togglePlayPause);
|
|
const nextSubtitle = useSrtPlayerStore((state) => state.nextSubtitle);
|
|
const previousSubtitle = useSrtPlayerStore((state) => state.previousSubtitle);
|
|
const restartSubtitle = useSrtPlayerStore((state) => state.restartSubtitle);
|
|
const toggleAutoPause = useSrtPlayerStore((state) => state.toggleAutoPause);
|
|
|
|
useEffect(() => {
|
|
const handleKeyDown = (event: globalThis.KeyboardEvent) => {
|
|
if (!enabled) return;
|
|
|
|
const target = event.target as HTMLElement;
|
|
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
|
|
return;
|
|
}
|
|
|
|
switch (event.key) {
|
|
case ' ':
|
|
event.preventDefault();
|
|
togglePlayPause();
|
|
break;
|
|
case 'n':
|
|
case 'N':
|
|
event.preventDefault();
|
|
nextSubtitle();
|
|
break;
|
|
case 'p':
|
|
case 'P':
|
|
event.preventDefault();
|
|
previousSubtitle();
|
|
break;
|
|
case 'r':
|
|
case 'R':
|
|
event.preventDefault();
|
|
restartSubtitle();
|
|
break;
|
|
case 'a':
|
|
case 'A':
|
|
event.preventDefault();
|
|
toggleAutoPause();
|
|
break;
|
|
}
|
|
};
|
|
|
|
document.addEventListener('keydown', handleKeyDown);
|
|
return () => {
|
|
document.removeEventListener('keydown', handleKeyDown);
|
|
};
|
|
}, [enabled, togglePlayPause, nextSubtitle, previousSubtitle, restartSubtitle, toggleAutoPause]);
|
|
}
|
|
|
|
export function useKeyboardShortcuts(
|
|
shortcuts: Array<{ key: string; action: () => void }>,
|
|
isEnabled: boolean = true
|
|
) {
|
|
useEffect(() => {
|
|
const handleKeyDown = (event: globalThis.KeyboardEvent) => {
|
|
if (!isEnabled) return;
|
|
|
|
const target = event.target as HTMLElement;
|
|
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
|
|
return;
|
|
}
|
|
|
|
const shortcut = shortcuts.find(s => s.key === event.key);
|
|
if (shortcut) {
|
|
event.preventDefault();
|
|
shortcut.action();
|
|
}
|
|
};
|
|
|
|
document.addEventListener('keydown', handleKeyDown);
|
|
return () => {
|
|
document.removeEventListener('keydown', handleKeyDown);
|
|
};
|
|
}, [shortcuts, isEnabled]);
|
|
}
|