import { Text } from "@/components/common/Text"; import { DownloadItem } from "@/components/DownloadItem"; import { SimilarItems } from "@/components/SimilarItems"; import { VideoPlayer } from "@/components/VideoPlayer"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { getBackdrop, getStreamUrl, getUserItemData } from "@/utils/jellyfin"; import { Ionicons } from "@expo/vector-icons"; import {} from "@jellyfin/sdk/lib/utils/url"; import { useQuery } from "@tanstack/react-query"; import { Image } from "expo-image"; import { Stack, useLocalSearchParams, useNavigation } from "expo-router"; import { useAtom } from "jotai"; import { useEffect } from "react"; import { ActivityIndicator, Dimensions, SafeAreaView, ScrollView, View, } from "react-native"; const page: React.FC = () => { const local = useLocalSearchParams(); const { id } = local as { id: string }; const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); const navigation = useNavigation(); const { data: item, isLoading: l1 } = useQuery({ queryKey: ["item", id], queryFn: async () => await getUserItemData({ api, userId: user?.Id, itemId: id, }), enabled: !!id && !!api, staleTime: Infinity, }); const screenWidth = Dimensions.get("window").width; const { data: playbackURL, isLoading: l2 } = useQuery({ queryKey: ["playbackUrl", id], queryFn: async () => { if (!api || !user?.Id) return; return await getStreamUrl({ api, userId: user.Id, item, startTimeTicks: item?.UserData?.PlaybackPositionTicks || 0, }); }, enabled: !!id && !!api && !!user?.Id && !!item, staleTime: Infinity, }); const { data: url } = useQuery({ queryKey: ["backdrop", item?.Id], queryFn: async () => getBackdrop(api, item), enabled: !!api && !!item?.Id, staleTime: Infinity, }); useEffect(() => { navigation.setOptions({ headerRight: () => { ; }, }); }, [item, playbackURL, navigation]); const { data: posterUrl } = useQuery({ queryKey: ["backdrop", item?.Id], queryFn: async () => getBackdrop(api, item), enabled: !!api && !!item?.Id, staleTime: Infinity, }); if (l1 || l2) return ( ); if (!item?.Id) return null; if (!playbackURL) return null; return ( {posterUrl && ( )} {item.Type === "Episode" ? ( <> {item?.SeriesName} {item?.Name} ) : ( <> {item?.Name} {item?.ProductionYear} )} {playbackURL && } {item.Overview} ); }; export default page;