import { useSettings } from "@/utils/atoms/settings"; import { useAtom } from "jotai"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View, ViewProps } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { usePlaySettings } from "@/providers/PlaySettingsProvider"; interface Props extends ViewProps {} export const AudioTrackSelector: React.FC = ({ ...props }) => { const { playSettings, setPlaySettings, playUrl } = usePlaySettings(); const [settings] = useSettings(); const selectedIndex = useMemo(() => { return playSettings?.audioIndex; }, [playSettings?.audioIndex]); const audioStreams = useMemo( () => playSettings?.mediaSource?.MediaStreams?.filter( (x) => x.Type === "Audio" ), [playSettings?.mediaSource] ); const selectedAudioStream = useMemo( () => audioStreams?.find((x) => x.Index === selectedIndex), [audioStreams, selectedIndex] ); // Set default audio stream only if none is selected and we have audio streams useEffect(() => { if (playSettings?.audioIndex !== undefined || !audioStreams?.length) return; const defaultAudioIndex = audioStreams.find( (x) => x.Language === settings?.defaultAudioLanguage )?.Index; if (defaultAudioIndex !== undefined) { setPlaySettings((prev) => ({ ...prev, audioIndex: defaultAudioIndex, })); } else { const index = playSettings?.mediaSource?.DefaultAudioStreamIndex ?? 0; setPlaySettings((prev) => ({ ...prev, audioIndex: index, })); } }, [ audioStreams, settings?.defaultAudioLanguage, playSettings?.mediaSource, setPlaySettings, ]); return ( Audio {selectedAudioStream?.DisplayTitle} Audio streams {audioStreams?.map((audio, idx: number) => ( { if (audio.Index !== null && audio.Index !== undefined) setPlaySettings((prev) => ({ ...prev, audioIndex: audio.Index, })); }} > {audio.DisplayTitle} ))} ); };