import { TouchableOpacity, View } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { atom, useAtom } from "jotai"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useEffect, useMemo } from "react"; import { MediaStream } from "@jellyfin/sdk/lib/generated-client/models"; import { tc } from "@/utils/textTools"; interface Props extends React.ComponentProps { item: BaseItemDto; onChange: (value: number) => void; selected: number; } export const SubtitleTrackSelector: React.FC = ({ item, onChange, selected, ...props }) => { const subtitleStreams = useMemo( () => item.MediaSources?.[0].MediaStreams?.filter( (x) => x.Type === "Subtitle", ) ?? [], [item], ); const selectedSubtitleSteam = useMemo( () => subtitleStreams.find((x) => x.Index === selected), [subtitleStreams, selected], ); useEffect(() => { const index = item.MediaSources?.[0].DefaultSubtitleStreamIndex; if (index !== undefined && index !== null) { onChange(index); } else { // Get first subtitle stream const firstSubtitle = subtitleStreams.find((x) => x.Index !== undefined); if (firstSubtitle?.Index !== undefined) { onChange(firstSubtitle.Index); } } }, []); if (subtitleStreams.length === 0) return null; return ( Subtitles {tc(selectedSubtitleSteam?.DisplayTitle, 13)} Subtitles {subtitleStreams?.map((subtitle, idx: number) => ( { if (subtitle.Index !== undefined && subtitle.Index !== null) onChange(subtitle.Index); }} > {subtitle.DisplayTitle} ))} ); };