import { convertBitsToMegabitsOrGigabits } from "@/utils/bToMb"; import { useAtom } from "jotai"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { usePlaySettings } from "@/providers/PlaySettingsProvider"; interface Props extends React.ComponentProps {} export const MediaSourceSelector: React.FC = ({ ...props }) => { const { playSettings, setPlaySettings, playUrl } = usePlaySettings(); const selectedMediaSource = useMemo(() => { console.log( "selectedMediaSource", playSettings?.mediaSource?.MediaStreams?.length ); return ( playSettings?.mediaSource?.MediaStreams?.find((x) => x.Type === "Video") ?.DisplayTitle || "N/A" ); }, [playSettings?.mediaSource]); // Set default media source on component mount useEffect(() => { if ( playSettings?.item?.MediaSources?.length && !playSettings?.mediaSource ) { console.log( "Setting default media source", playSettings?.item?.MediaSources?.[0].Id ); setPlaySettings((prev) => ({ ...prev, mediaSource: playSettings?.item?.MediaSources?.[0], })); } }, [playSettings?.item?.MediaSources, setPlaySettings]); const name = (name?: string | null) => { if (name && name.length > 40) return ( name.substring(0, 20) + " [...] " + name.substring(name.length - 20) ); return name; }; return ( Video {selectedMediaSource} Media sources {playSettings?.item?.MediaSources?.map((source, idx: number) => ( { setPlaySettings((prev) => ({ ...prev, mediaSource: source, })); }} > {`${name(source.Name)} - ${convertBitsToMegabitsOrGigabits( source.Size )}`} ))} ); };