diff --git a/front/packages/ui/src/player/components/right-buttons.tsx b/front/packages/ui/src/player/components/right-buttons.tsx index b5fa5146..fb181feb 100644 --- a/front/packages/ui/src/player/components/right-buttons.tsx +++ b/front/packages/ui/src/player/components/right-buttons.tsx @@ -20,8 +20,7 @@ import { Font, Track, WatchItem } from "@kyoo/models"; import { IconButton, tooltip, Menu, ts } from "@kyoo/primitives"; -import { useAtom, useSetAtom } from "jotai"; -import { useEffect, useState } from "react"; +import { useAtom } from "jotai"; import { Platform, View } from "react-native"; import { useTranslation } from "react-i18next"; import ClosedCaption from "@material-symbols/svg-400/rounded/closed_caption-fill.svg"; @@ -50,16 +49,7 @@ export const RightButtons = ({ const { css } = useYoshiki(); const { t } = useTranslation(); const [isFullscreen, setFullscreen] = useAtom(fullscreenAtom); - const setSubAtom = useSetAtom(subtitleAtom); - const [selectedSubtitle, setSubtitle] = useState(undefined); - - useEffect(() => { - const sub = - subtitles?.find( - (x) => x.language === selectedSubtitle || x.id.toString() === selectedSubtitle, - ) ?? null; - setSubAtom(sub); - }, [subtitles, selectedSubtitle, setSubAtom]); + const [selectedSubtitle, setSubtitle] = useAtom(subtitleAtom); const spacing = css({ marginHorizontal: ts(1) }); @@ -77,14 +67,14 @@ export const RightButtons = ({ setSubtitle(undefined)} + onSelect={() => setSubtitle(null)} /> {subtitles.map((x) => ( setSubtitle(x.language ?? x.id.toString())} + selected={selectedSubtitle === x} + onSelect={() => setSubtitle(x)} /> ))} diff --git a/front/packages/ui/src/player/state.tsx b/front/packages/ui/src/player/state.tsx index b4cfb1da..21584032 100644 --- a/front/packages/ui/src/player/state.tsx +++ b/front/packages/ui/src/player/state.tsx @@ -110,6 +110,14 @@ export const Video = memo(function _Video({ setPlay(true); }, [mode, links, setLoad, setPrivateProgress, setPublicProgress, setPlay]); + const [subtitle, setSubtitle] = useAtom(subtitleAtom); + useEffect(() => { + if (!subtitle || !subtitles) return; + setSubtitle(subtitles.find(x => x.language === subtitle.language) ?? null); + // When the video change, try to persist the subtitle language. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [subtitles]); + const volume = useAtomValue(volumeAtom); const isMuted = useAtomValue(mutedAtom); diff --git a/front/packages/ui/src/player/video.tsx b/front/packages/ui/src/player/video.tsx index 1d369dac..0213734f 100644 --- a/front/packages/ui/src/player/video.tsx +++ b/front/packages/ui/src/player/video.tsx @@ -153,7 +153,7 @@ export const QualitiesMenu = (props: CustomMenu) => { { setPlayMode(PlayMode.Hls); setVideo(-1);