import { usePlaySettings } from "@/providers/PlaySettingsProvider"; import { useSettings } from "@/utils/atoms/settings"; import { tc } from "@/utils/textTools"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View, ViewProps } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; interface Props extends ViewProps {} export const SubtitleTrackSelector: React.FC = ({ ...props }) => { const { playSettings, setPlaySettings, playUrl } = usePlaySettings(); const [settings] = useSettings(); const subtitleStreams = useMemo( () => playSettings?.mediaSource?.MediaStreams?.filter( (x) => x.Type === "Subtitle" ) ?? [], [playSettings?.mediaSource] ); const selectedSubtitleSteam = useMemo( () => subtitleStreams.find((x) => x.Index === playSettings?.subtitleIndex), [subtitleStreams, playSettings?.subtitleIndex] ); useEffect(() => { const defaultSubIndex = subtitleStreams?.find( (x) => x.Language === settings?.defaultSubtitleLanguage?.value )?.Index; if (defaultSubIndex !== undefined && defaultSubIndex !== null) { setPlaySettings((prev) => ({ ...prev, subtitleIndex: defaultSubIndex, })); return; } setPlaySettings((prev) => ({ ...prev, subtitleIndex: -1, })); }, [subtitleStreams, settings]); if (subtitleStreams.length === 0) return null; return ( Subtitle {selectedSubtitleSteam ? tc(selectedSubtitleSteam?.DisplayTitle, 7) : "None"} Subtitle tracks { setPlaySettings((prev) => ({ ...prev, subtitleIndex: -1, })); }} > None {subtitleStreams?.map((subtitle, idx: number) => ( { if (subtitle.Index !== undefined && subtitle.Index !== null) setPlaySettings((prev) => ({ ...prev, subtitleIndex: subtitle.Index, })); }} > {subtitle.DisplayTitle} ))} ); };