mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-12 22:25:24 +03:00
Refactor keybaord listener
This commit is contained in:
parent
1d97fb54e7
commit
56a0524853
@ -49,8 +49,14 @@ export default function ExportCard({
|
||||
|
||||
useKeyboardListener(
|
||||
editName != undefined ? ["Enter"] : [],
|
||||
(_, down, repeat) => {
|
||||
if (down && !repeat && editName && editName.update.length > 0) {
|
||||
(key, modifiers) => {
|
||||
if (
|
||||
key == "Enter" &&
|
||||
modifiers.down &&
|
||||
!modifiers.repeat &&
|
||||
editName &&
|
||||
editName.update.length > 0
|
||||
) {
|
||||
onRename(exportedRecording.id, editName.update);
|
||||
setEditName(undefined);
|
||||
}
|
||||
|
||||
@ -16,7 +16,9 @@ import {
|
||||
MdVolumeOff,
|
||||
MdVolumeUp,
|
||||
} from "react-icons/md";
|
||||
import useKeyboardListener from "@/hooks/use-keyboard-listener";
|
||||
import useKeyboardListener, {
|
||||
KeyModifiers,
|
||||
} from "@/hooks/use-keyboard-listener";
|
||||
import { VolumeSlider } from "../ui/slider";
|
||||
import FrigatePlusIcon from "../icons/FrigatePlusIcon";
|
||||
import {
|
||||
@ -137,42 +139,36 @@ export default function VideoControls({
|
||||
}, [volume, muted]);
|
||||
|
||||
const onKeyboardShortcut = useCallback(
|
||||
(key: string, down: boolean, repeat: boolean) => {
|
||||
(key: string, modifiers: KeyModifiers) => {
|
||||
if (!modifiers.down) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (key) {
|
||||
case "ArrowDown":
|
||||
if (down) {
|
||||
onSeek(-1);
|
||||
}
|
||||
onSeek(-1);
|
||||
break;
|
||||
case "ArrowLeft":
|
||||
if (down) {
|
||||
onSeek(-10);
|
||||
}
|
||||
onSeek(-10);
|
||||
break;
|
||||
case "ArrowRight":
|
||||
if (down) {
|
||||
onSeek(10);
|
||||
}
|
||||
onSeek(10);
|
||||
break;
|
||||
case "ArrowUp":
|
||||
if (down) {
|
||||
onSeek(1);
|
||||
}
|
||||
onSeek(1);
|
||||
break;
|
||||
case "f":
|
||||
if (toggleFullscreen && down && !repeat) {
|
||||
if (toggleFullscreen && !modifiers.repeat) {
|
||||
toggleFullscreen();
|
||||
}
|
||||
break;
|
||||
case "m":
|
||||
if (setMuted && down && !repeat && video) {
|
||||
if (setMuted && !modifiers.repeat && video) {
|
||||
setMuted(!muted);
|
||||
}
|
||||
break;
|
||||
case " ":
|
||||
if (down) {
|
||||
onPlayPause(!isPlaying);
|
||||
}
|
||||
onPlayPause(!isPlaying);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
import { useCallback, useEffect } from "react";
|
||||
|
||||
export type KeyModifiers = {
|
||||
down: boolean;
|
||||
repeat: boolean;
|
||||
ctrl: boolean;
|
||||
};
|
||||
|
||||
export default function useKeyboardListener(
|
||||
keys: string[],
|
||||
listener: (
|
||||
key: string,
|
||||
modifiers: { down: boolean; repeat: boolean; ctrl: boolean },
|
||||
) => void,
|
||||
listener: (key: string, modifiers: KeyModifiers) => void,
|
||||
) {
|
||||
const keyDownListener = useCallback(
|
||||
(e: KeyboardEvent) => {
|
||||
|
||||
@ -231,8 +231,8 @@ function Logs() {
|
||||
|
||||
useKeyboardListener(
|
||||
["PageDown", "PageUp", "ArrowDown", "ArrowUp"],
|
||||
(key, down, _) => {
|
||||
if (!down) {
|
||||
(key, modifiers) => {
|
||||
if (!modifiers.down) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -598,7 +598,11 @@ function DetectionReview({
|
||||
// keyboard
|
||||
|
||||
useKeyboardListener(["a"], (key, modifiers) => {
|
||||
if (key == "a" && modifiers.down && modifiers.ctrl) {
|
||||
if (modifiers.repeat || !modifiers.down) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (key == "a" && modifiers.ctrl) {
|
||||
onSelectAllReviews();
|
||||
}
|
||||
});
|
||||
|
||||
@ -482,12 +482,12 @@ function PtzControlPanel({
|
||||
|
||||
useKeyboardListener(
|
||||
["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "+", "-"],
|
||||
(key, down, repeat) => {
|
||||
if (repeat) {
|
||||
(key, modifiers) => {
|
||||
if (modifiers.repeat) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!down) {
|
||||
if (!modifiers.down) {
|
||||
sendPtz("STOP");
|
||||
return;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user