42 lines
912 B
TypeScript
Executable File
42 lines
912 B
TypeScript
Executable File
import {PlayerState} from '@common/player/state/player-state';
|
|
import {isCtrlOrShiftPressed} from '@common/utils/keybinds/is-ctrl-or-shift-pressed';
|
|
|
|
export function handlePlayerKeybinds(
|
|
e: KeyboardEvent,
|
|
state: () => PlayerState,
|
|
) {
|
|
if (
|
|
['input', 'textarea'].includes(
|
|
(e.target as HTMLElement)?.tagName.toLowerCase(),
|
|
)
|
|
)
|
|
return;
|
|
|
|
if (e.key === ' ' || e.key === 'k') {
|
|
e.preventDefault();
|
|
if (state().isPlaying) {
|
|
state().pause();
|
|
} else {
|
|
state().play();
|
|
}
|
|
}
|
|
|
|
if (e.key === 'ArrowLeft') {
|
|
e.preventDefault();
|
|
if (isCtrlOrShiftPressed(e)) {
|
|
state().playPrevious();
|
|
} else {
|
|
state().seek(state().getCurrentTime() - 10);
|
|
}
|
|
}
|
|
|
|
if (e.key === 'ArrowRight') {
|
|
e.preventDefault();
|
|
if (isCtrlOrShiftPressed(e)) {
|
|
state().playNext();
|
|
} else {
|
|
state().seek(state().getCurrentTime() + 10);
|
|
}
|
|
}
|
|
}
|