diff --git a/frontend/src/components/PlexPlayer.tsx b/frontend/src/components/PlexPlayer.tsx index c8e775c2..029808e0 100644 --- a/frontend/src/components/PlexPlayer.tsx +++ b/frontend/src/components/PlexPlayer.tsx @@ -38,7 +38,7 @@ import { subShadowCss, type PlexPlayerPrefs, } from "../lib/plexPlayerPrefs"; -import { Ctrl, PanelHead } from "./plexPlayerControls"; +import { Ctrl, PanelHead, Skip10 } from "./plexPlayerControls"; import { PlexPlayerSettings } from "./PlexPlayerSettings"; import { useAutoSkip, @@ -936,9 +936,19 @@ export default function PlexPlayer({ itemId, onClose, queue }: Props) {
- + seekTo(absRef.current - 10)} + align="start" + > + + + {playing ? : } + seekTo(absRef.current + 10)}> + + seekTo(0)}> diff --git a/frontend/src/components/plexPlayerControls.tsx b/frontend/src/components/plexPlayerControls.tsx index 65ce5896..e764c52e 100644 --- a/frontend/src/components/plexPlayerControls.tsx +++ b/frontend/src/components/plexPlayerControls.tsx @@ -1,6 +1,49 @@ import { type ReactNode } from "react"; import { RotateCcw } from "lucide-react"; +// ±10s skip glyph: an outline circular arrow with a "10" in the centre — the YouTube/Plex-native +// muscle-memory shape. Deliberately distinct from the episode-level SkipBack/SkipForward (double +// triangles) and from Restart's plain RotateCcw. The arrowhead is an L-corner at the arc's open end, +// the same construction lucide uses for RotateCcw/RotateCw, so it sits consistently in the bar. +export function Skip10({ dir }: { dir: "back" | "forward" }) { + const back = dir === "back"; + return ( + + ); +} + // --- settings-panel building blocks ------------------------------------------------------------ export function PanelHead({ children }: { children: ReactNode }) { return ( diff --git a/frontend/src/i18n/locales/en/plex.json b/frontend/src/i18n/locales/en/plex.json index 44a30df4..dd529899 100644 --- a/frontend/src/i18n/locales/en/plex.json +++ b/frontend/src/i18n/locales/en/plex.json @@ -160,6 +160,8 @@ "skipCredits": "Skip credits", "playPause": "Play / pause (space)", "restart": "Restart from beginning", + "rewind10": "Back 10 seconds", + "forward10": "Forward 10 seconds", "prev": "Previous episode", "next": "Next episode", "mute": "Mute (m)", diff --git a/frontend/src/i18n/locales/hu/plex.json b/frontend/src/i18n/locales/hu/plex.json index 57ab000e..e1983c6d 100644 --- a/frontend/src/i18n/locales/hu/plex.json +++ b/frontend/src/i18n/locales/hu/plex.json @@ -160,6 +160,8 @@ "skipCredits": "Stáblista átugrása", "playPause": "Lejátszás / szünet (szóköz)", "restart": "Újra az elejéről", + "rewind10": "10 másodperc vissza", + "forward10": "10 másodperc előre", "prev": "Előző rész", "next": "Következő rész", "mute": "Némítás (m)",