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, MediaSourceInfo, } 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"; import { useSettings } from "@/utils/atoms/settings"; interface Props extends React.ComponentProps { source: MediaSourceInfo; onChange: (value: number) => void; selected: number; } export const SubtitleTrackSelector: React.FC = ({ source, onChange, selected, ...props }) => { const [settings] = useSettings(); const subtitleStreams = useMemo( () => source.MediaStreams?.filter((x) => x.Type === "Subtitle") ?? [], [source] ); const selectedSubtitleSteam = useMemo( () => subtitleStreams.find((x) => x.Index === selected), [subtitleStreams, selected] ); useEffect(() => { // const index = source.DefaultAudioStreamIndex; // if (index !== undefined && index !== null) { // onChange(index); // return; // } const defaultSubIndex = subtitleStreams?.find( (x) => x.Language === settings?.defaultSubtitleLanguage?.value )?.Index; if (defaultSubIndex !== undefined && defaultSubIndex !== null) { onChange(defaultSubIndex); return; } onChange(-1); }, [subtitleStreams, settings]); if (subtitleStreams.length === 0) return null; return ( Subtitle {selectedSubtitleSteam ? tc(selectedSubtitleSteam?.DisplayTitle, 7) : "None"} Subtitle tracks { onChange(-1); }} > None {subtitleStreams?.map((subtitle, idx: number) => ( { if (subtitle.Index !== undefined && subtitle.Index !== null) onChange(subtitle.Index); }} > {subtitle.DisplayTitle} ))} ); };