diff --git a/components/posters/MoviePoster.tsx b/components/posters/MoviePoster.tsx new file mode 100644 index 00000000..c8e39b88 --- /dev/null +++ b/components/posters/MoviePoster.tsx @@ -0,0 +1,69 @@ +import { apiAtom } from "@/providers/JellyfinProvider"; +import { getPrimaryImageUrl } from "@/utils/jellyfin/image/getPrimaryImageUrl"; +import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; +import { Image } from "expo-image"; +import { useAtom } from "jotai"; +import { useMemo, useState } from "react"; +import { View } from "react-native"; +import { WatchedIndicator } from "@/components/WatchedIndicator"; + +type MoviePosterProps = { + item: BaseItemDto; + showProgress?: boolean; +}; + +const MoviePoster: React.FC = ({ + item, + showProgress = false, +}) => { + const [api] = useAtom(apiAtom); + + const url = useMemo( + () => + getPrimaryImageUrl({ + api, + item, + }), + [item] + ); + + const [progress, setProgress] = useState( + item.UserData?.PlayedPercentage || 0 + ); + + const blurhash = useMemo(() => { + const key = item.ImageTags?.["Primary"] as string; + return item.ImageBlurHashes?.["Primary"]?.[key]; + }, [item]); + + return ( + + + + {showProgress && progress > 0 && ( + + )} + + ); +}; + +export default MoviePoster; diff --git a/components/posters/SeriesPoster.tsx b/components/posters/SeriesPoster.tsx new file mode 100644 index 00000000..6e4aa1f8 --- /dev/null +++ b/components/posters/SeriesPoster.tsx @@ -0,0 +1,58 @@ +import { apiAtom } from "@/providers/JellyfinProvider"; +import { getPrimaryImageUrl } from "@/utils/jellyfin/image/getPrimaryImageUrl"; +import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; +import { Image } from "expo-image"; +import { useAtom } from "jotai"; +import { useMemo, useState } from "react"; +import { View } from "react-native"; +import { WatchedIndicator } from "@/components/WatchedIndicator"; + +type MoviePosterProps = { + item: BaseItemDto; + showProgress?: boolean; +}; + +const SeriesPoster: React.FC = ({ item }) => { + const [api] = useAtom(apiAtom); + + const url = useMemo( + () => + getPrimaryImageUrl({ + api, + item, + }), + [item] + ); + + const blurhash = useMemo(() => { + const key = item.ImageTags?.["Primary"] as string; + return item.ImageBlurHashes?.["Primary"]?.[key]; + }, [item]); + + return ( + + + + ); +}; + +export default SeriesPoster;