From 634f28ac286da801c24c381910a59c469ece2896 Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Fri, 2 Aug 2024 08:47:39 +0200 Subject: [PATCH] fix --- app.json | 1 + app/(auth)/(tabs)/_layout.tsx | 1 - app/(auth)/(tabs)/index.tsx | 110 ++++---- app/(auth)/(tabs)/search.tsx | 216 ++++++++++++---- app/(auth)/collections/[collection]/page.tsx | 4 +- app/(auth)/items/[id]/page.tsx | 85 +++--- app/(auth)/series/[id]/page.tsx | 61 +++++ app/(auth)/settings.tsx | 180 +++++++------ app/(public)/login.tsx | 145 ----------- app/_layout.tsx | 12 +- bun.lockb | Bin 506104 -> 529320 bytes components/Button.tsx | 25 +- components/ContinueWatchingPoster.tsx | 15 +- components/DownloadItem.tsx | 97 +++++-- components/ItemCardText.tsx | 13 +- components/MoviePoster.tsx | 30 ++- components/OfflineVideoPlayer.tsx | 4 +- components/PlayedStatus.tsx | 58 +++++ components/Poster.tsx | 51 ++++ components/ProgressCircle.tsx | 1 + components/SimilarItems.tsx | 4 +- components/VerticalPoster.tsx | 41 --- components/VideoPlayer.tsx | 208 +++++++++++---- components/WatchedIndicator.tsx | 13 + components/common/HorrizontalScroll.tsx | 47 ++++ components/common/LargePoster.tsx | 20 ++ components/series/CastAndCrew.tsx | 24 ++ components/series/CurrentSeries.tsx | 28 ++ components/series/NextUp.tsx | 40 +++ components/series/SeasonPicker.tsx | 137 ++++++++++ index.js | 2 + package.json | 9 +- providers/JellyfinProvider.tsx | 48 ++-- utils/jellyfin.ts | 257 +++++++++++++++++-- utils/log.ts | 47 ++++ 35 files changed, 1488 insertions(+), 546 deletions(-) create mode 100644 app/(auth)/series/[id]/page.tsx delete mode 100644 app/(public)/login.tsx create mode 100644 components/PlayedStatus.tsx create mode 100644 components/Poster.tsx delete mode 100644 components/VerticalPoster.tsx create mode 100644 components/WatchedIndicator.tsx create mode 100644 components/common/HorrizontalScroll.tsx create mode 100644 components/common/LargePoster.tsx create mode 100644 components/series/CastAndCrew.tsx create mode 100644 components/series/CurrentSeries.tsx create mode 100644 components/series/NextUp.tsx create mode 100644 components/series/SeasonPicker.tsx create mode 100644 index.js create mode 100644 utils/log.ts diff --git a/app.json b/app.json index 4f698757..e4ce296b 100644 --- a/app.json +++ b/app.json @@ -39,6 +39,7 @@ "expo-font", "expo-video", "react-native-compressor", + // "react-native-google-cast", [ "react-native-video", { diff --git a/app/(auth)/(tabs)/_layout.tsx b/app/(auth)/(tabs)/_layout.tsx index b373ade5..e9630ff1 100644 --- a/app/(auth)/(tabs)/_layout.tsx +++ b/app/(auth)/(tabs)/_layout.tsx @@ -19,7 +19,6 @@ export default function TabLayout() { options={{ headerShown: true, headerStyle: { backgroundColor: "black" }, - title: "Home", tabBarIcon: ({ color, focused }) => ( { + if ( + order.indexOf(a.CollectionType!) < order.indexOf(b.CollectionType!) + ) { + return 1; + } + + return -1; + }); + return data.Items || []; }, enabled: !!api && !!user?.Id, @@ -85,56 +100,53 @@ export default function index() { return ( - - Continue Watching - - - {data.map((item) => ( - router.push(`/items/${item.Id}/page`)} - className="flex flex-col w-48" - > - - - - - - ))} - - - Collections - - - {collections?.map((item) => ( - router.push(`/collections/${item.Id}/page`)} - className="flex flex-col w-48" - > - - - - - - ))} - - - Suggestions - - - {suggestions?.map((item) => ( - router.push(`/items/${item.Id}/page`)} - className="flex flex-col w-48" - > + + Continue Watching + + data={data} + renderItem={(item, index) => ( + router.push(`/items/${item.Id}/page`)} + className="flex flex-col w-48" + > + - - ))} - - + + + )} + /> + Collections + + data={collections} + renderItem={(item, index) => ( + router.push(`/collections/${item.Id}/page`)} + className="flex flex-col w-48" + > + + + + + + )} + /> + Suggestions + + data={suggestions} + renderItem={(item, index) => ( + router.push(`/items/${item.Id}/page`)} + className="flex flex-col w-48" + > + + + + )} + /> ); diff --git a/app/(auth)/(tabs)/search.tsx b/app/(auth)/(tabs)/search.tsx index 8afbebe8..62410f29 100644 --- a/app/(auth)/(tabs)/search.tsx +++ b/app/(auth)/(tabs)/search.tsx @@ -1,7 +1,12 @@ +import { HorizontalScroll } from "@/components/common/HorrizontalScroll"; import { Input } from "@/components/common/Input"; import { Text } from "@/components/common/Text"; +import ContinueWatchingPoster from "@/components/ContinueWatchingPoster"; +import { ItemCardText } from "@/components/ItemCardText"; +import MoviePoster from "@/components/MoviePoster"; +import Poster from "@/components/Poster"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; -import { Ionicons } from "@expo/vector-icons"; +import { getUserItemData } from "@/utils/jellyfin"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { getSearchApi } from "@jellyfin/sdk/lib/utils/api"; import { useQuery } from "@tanstack/react-query"; @@ -12,29 +17,12 @@ import { ScrollView, TouchableOpacity, View } from "react-native"; export default function search() { const [search, setSearch] = useState(""); - const [totalResults, setTotalResults] = useState(0); const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); - // useEffect(() => { - // (async () => { - // if (!api || search.length === 0) return; - // const searchApi = await getSearchApi(api).getSearchHints({ - // searchTerm: search, - // limit: 10, - // includeItemTypes: ["Movie"], - // }); - - // const data = searchApi.data; - - // setTotalResults(data.TotalRecordCount || 0); - // setData(data.SearchHints || []); - // })(); - // }, [search]); - - const { data } = useQuery({ - queryKey: ["search", search], + const { data: movies } = useQuery({ + queryKey: ["search-movies", search], queryFn: async () => { if (!api || !user || search.length === 0) return []; @@ -48,44 +36,166 @@ export default function search() { }, }); - return ( - - - setSearch(text)} - /> - + const { data: series } = useQuery({ + queryKey: ["search-series", search], + queryFn: async () => { + if (!api || !user || search.length === 0) return []; - - - {data?.map((item, index) => ( - - ))} + const searchApi = await getSearchApi(api).getSearchHints({ + searchTerm: search, + limit: 10, + includeItemTypes: ["Series"], + }); + + return searchApi.data.SearchHints; + }, + }); + const { data: episodes } = useQuery({ + queryKey: ["search-episodes", search], + queryFn: async () => { + if (!api || !user || search.length === 0) return []; + + const searchApi = await getSearchApi(api).getSearchHints({ + searchTerm: search, + limit: 10, + includeItemTypes: ["Episode"], + }); + + return searchApi.data.SearchHints; + }, + }); + + return ( + + + + setSearch(text)} + /> - - + + Movies + m.Id!)} + renderItem={(data) => ( + + data={data} + renderItem={(item) => ( + router.push(`/items/${item.Id}/page`)} + > + + {item.Name} + + {item.ProductionYear} + + + )} + /> + )} + /> + Series + m.Id!)} + renderItem={(data) => ( + + data={data} + renderItem={(item) => ( + router.push(`/series/${item.Id}/page`)} + className="flex flex-col w-32" + > + + {item.Name} + + {item.ProductionYear} + + + )} + /> + )} + /> + Episodes + m.Id!)} + renderItem={(data) => ( + + data={data} + renderItem={(item) => ( + router.push(`/items/${item.Id}/page`)} + className="flex flex-col w-48" + > + + + + )} + /> + )} + /> + + {/* Series + + } + /> + + Episodes + ( + + )} + /> */} + + ); } -type RenderItemProps = { - item: BaseItemDto; +type Props = { + ids?: string[] | null; + renderItem: (data: BaseItemDto[]) => React.ReactNode; }; -const RenderItem: React.FC = ({ item }) => { - return ( - router.push(`/(auth)/items/${item.Id}/page`)} - className="flex flex-row items-center justify-between p-4 bg-neutral-900 border-neutral-800" - > - - {item.Name} - {item.Type === "Movie" && ( - {item.ProductionYear} - )} - - - - ); +const SearchItemWrapper: React.FC = ({ ids, renderItem }) => { + const [api] = useAtom(apiAtom); + const [user] = useAtom(userAtom); + + const { data, isLoading: l1 } = useQuery({ + queryKey: ["items", ids], + queryFn: async () => { + if (!user?.Id || !api || !ids || ids.length === 0) { + return []; + } + + const itemPromises = ids.map((id) => + getUserItemData({ + api, + userId: user.Id, + itemId: id, + }) + ); + + const results = await Promise.all(itemPromises); + + // Filter out null items + return results.filter((item) => item !== null); + }, + enabled: !!ids && ids.length > 0 && !!api && !!user?.Id, + staleTime: Infinity, + }); + + if (!data) return No results; + + return renderItem(data); }; diff --git a/app/(auth)/collections/[collection]/page.tsx b/app/(auth)/collections/[collection]/page.tsx index 9b5bf370..7907e624 100644 --- a/app/(auth)/collections/[collection]/page.tsx +++ b/app/(auth)/collections/[collection]/page.tsx @@ -36,8 +36,6 @@ const page: React.FC = () => { }) ).data; - console.log(data.Items?.find((item) => item.Id == collectionId)); - return data.Items?.find((item) => item.Id == collectionId); }, enabled: !!api && !!user?.Id, @@ -143,6 +141,8 @@ const page: React.FC = () => { onPress={() => { if (collection?.CollectionType === "movies") { router.push(`/items/${item.Id}/page`); + } else if (collection?.CollectionType === "tvshows") { + router.push(`/series/${item.Id}/page`); } }} > diff --git a/app/(auth)/items/[id]/page.tsx b/app/(auth)/items/[id]/page.tsx index a386c275..1c85f01f 100644 --- a/app/(auth)/items/[id]/page.tsx +++ b/app/(auth)/items/[id]/page.tsx @@ -1,5 +1,9 @@ +import { LargePoster } from "@/components/common/LargePoster"; import { Text } from "@/components/common/Text"; import { DownloadItem } from "@/components/DownloadItem"; +import { PlayedStatus } from "@/components/PlayedStatus"; +import { CastAndCrew } from "@/components/series/CastAndCrew"; +import { CurrentSeries } from "@/components/series/CurrentSeries"; import { SimilarItems } from "@/components/SimilarItems"; import { VideoPlayer } from "@/components/VideoPlayer"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; @@ -7,17 +11,10 @@ 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 { useLocalSearchParams, useNavigation } from "expo-router"; import { useAtom } from "jotai"; import { useEffect } from "react"; -import { - ActivityIndicator, - Dimensions, - SafeAreaView, - ScrollView, - View, -} from "react-native"; +import { ActivityIndicator, ScrollView, View } from "react-native"; const page: React.FC = () => { const local = useLocalSearchParams(); @@ -40,8 +37,6 @@ const page: React.FC = () => { staleTime: Infinity, }); - const screenWidth = Dimensions.get("window").width; - const { data: playbackURL, isLoading: l2 } = useQuery({ queryKey: ["playbackUrl", id], queryFn: async () => { @@ -57,13 +52,6 @@ const page: React.FC = () => { 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: () => { @@ -90,16 +78,9 @@ const page: React.FC = () => { if (!playbackURL) return null; return ( - - {posterUrl && ( - - - - )} - + + + {item.Type === "Episode" ? ( <> @@ -107,6 +88,13 @@ const page: React.FC = () => { {item?.Name} + + {`S${item?.SeasonName?.replace("Season ", "")}:E${( + item.IndexNumber || 0 + ).toString()}`} + {" - "} + {item.ProductionYear} + ) : ( <> @@ -120,15 +108,54 @@ const page: React.FC = () => { )} - + {playbackURL && } + + + {item.Overview} + + + + Video + Audio + Subtitles + + + + {item.MediaStreams?.find((i) => i.Type === "Video")?.DisplayTitle} + + + {item.MediaStreams?.find((i) => i.Type === "Audio")?.DisplayTitle} + + + { + item.MediaStreams?.find((i) => i.Type === "Subtitle") + ?.DisplayTitle + } + + + + + + + + + + {item.Type === "Episode" && ( + + + + )} + + + ); }; diff --git a/app/(auth)/series/[id]/page.tsx b/app/(auth)/series/[id]/page.tsx new file mode 100644 index 00000000..86e768f1 --- /dev/null +++ b/app/(auth)/series/[id]/page.tsx @@ -0,0 +1,61 @@ +import { Text } from "@/components/common/Text"; +import MoviePoster from "@/components/MoviePoster"; +import { NextUp } from "@/components/series/NextUp"; +import { SeasonPicker } from "@/components/series/SeasonPicker"; +import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; +import { getPrimaryImageById, getUserItemData, nextUp } from "@/utils/jellyfin"; +import { useQuery } from "@tanstack/react-query"; +import { useLocalSearchParams } from "expo-router"; +import { useAtom } from "jotai"; +import { useEffect } from "react"; +import { ScrollView, View } from "react-native"; + +const page: React.FC = () => { + const params = useLocalSearchParams(); + const { id: seriesId } = params as { id: string }; + + const [api] = useAtom(apiAtom); + const [user] = useAtom(userAtom); + + const { data: item } = useQuery({ + queryKey: ["item", seriesId], + queryFn: async () => + await getUserItemData({ + api, + userId: user?.Id, + itemId: seriesId, + }), + enabled: !!seriesId && !!api, + staleTime: Infinity, + }); + + const { data: next } = useQuery({ + queryKey: ["nextUp", seriesId], + queryFn: async () => + await nextUp({ + userId: user?.Id, + api, + itemId: seriesId, + }), + enabled: !!api && !!seriesId && !!user?.Id, + staleTime: 0, + }); + + if (!item) return null; + + return ( + + + + + {item?.Name} + {item?.Overview} + + + + + + ); +}; + +export default page; diff --git a/app/(auth)/settings.tsx b/app/(auth)/settings.tsx index f0a92c35..9776fa53 100644 --- a/app/(auth)/settings.tsx +++ b/app/(auth)/settings.tsx @@ -4,15 +4,17 @@ import { runningProcesses } from "@/components/DownloadItem"; import { ListItem } from "@/components/ListItem"; import ProgressCircle from "@/components/ProgressCircle"; import { apiAtom, useJellyfin, userAtom } from "@/providers/JellyfinProvider"; +import { readFromLog } from "@/utils/log"; import { Ionicons } from "@expo/vector-icons"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import AsyncStorage from "@react-native-async-storage/async-storage"; +import { useQuery } from "@tanstack/react-query"; import * as FileSystem from "expo-file-system"; import { useRouter } from "expo-router"; import { FFmpegKit } from "ffmpeg-kit-react-native"; import { useAtom } from "jotai"; import { useEffect, useState } from "react"; -import { TouchableOpacity, View } from "react-native"; +import { ScrollView, TouchableOpacity, View } from "react-native"; const deleteAllFiles = async () => { const directoryUri = FileSystem.documentDirectory; @@ -83,90 +85,118 @@ export default function settings() { })(); }, [key]); + const { data: logs } = useQuery({ + queryKey: ["logs"], + queryFn: async () => readFromLog(), + }); + return ( - - Information + + + Information - - - - - + + + + - - Downloads + - {files.length > 0 ? ( - - {files.map((file) => ( - { - router.back(); - router.push( - `/(auth)/player/offline/page?url=${file.Id}.mp4&itemId=${file.Id}` - ); - }} - > - { - deleteFile(file.Id); - setKey((prevKey) => prevKey + 1); - }} - > - - - } + + Downloads + + {files.length > 0 ? ( + + {files.map((file) => ( + { + router.back(); + router.push( + `/(auth)/player/offline/page?url=${file.Id}.mp4&itemId=${file.Id}` + ); + }} + > + { + deleteFile(file.Id); + setKey((prevKey) => prevKey + 1); + }} + > + + + } + /> + + ))} + + ) : activeProcess ? ( + - - ))} - - ) : activeProcess ? ( - - } - /> - ) : ( - No downloaded files - )} - + } + /> + ) : ( + No downloaded files + )} + - - - {session?.item.Id && ( - )} - + + {session?.item.Id && ( + + )} + + Logs + + {logs?.map((l) => ( + + + {l.level} + + {l.message} + + ))} + + + ); } diff --git a/app/(public)/login.tsx b/app/(public)/login.tsx deleted file mode 100644 index e0bc4d83..00000000 --- a/app/(public)/login.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import { Button } from "@/components/Button"; -import { Input } from "@/components/common/Input"; -import { Text } from "@/components/common/Text"; -import { apiAtom, useJellyfin } from "@/providers/JellyfinProvider"; -import { useAtom } from "jotai"; -import React, { useMemo, useState } from "react"; -import { KeyboardAvoidingView, Platform, View } from "react-native"; - -import { z } from "zod"; - -const CredentialsSchema = z.object({ - username: z.string().min(1, "Username is required"), - password: z.string().min(1, "Password is required"), -}); - -const Login: React.FC = () => { - const { setServer, login, removeServer } = useJellyfin(); - const [api] = useAtom(apiAtom); - - const [serverURL, setServerURL] = useState(""); - const [credentials, setCredentials] = useState<{ - username: string; - password: string; - }>({ - username: "", - password: "", - }); - - const [loading, setLoading] = useState(false); - - const handleLogin = async () => { - setLoading(true); - const result = CredentialsSchema.safeParse(credentials); - if (result.success) { - await login(credentials.username, credentials.password); - } - setLoading(false); - }; - - const parsedServerURL = useMemo(() => { - let parsedServerURL = serverURL.trim(); - - if (parsedServerURL) { - parsedServerURL = parsedServerURL.endsWith("/") - ? parsedServerURL.replace("/", "") - : parsedServerURL; - parsedServerURL = parsedServerURL.startsWith("http") - ? parsedServerURL - : "http://" + parsedServerURL; - - return parsedServerURL; - } - - return ""; - }, [serverURL]); - - const handleConnect = (url: string) => { - setServer({ address: url }); - }; - - if (api?.basePath) { - return ( - - - Jellyfin - Server: {api.basePath} - - Log in - - setCredentials({ ...credentials, username: text }) - } - value={credentials.username} - autoFocus - secureTextEntry={false} - keyboardType="default" - returnKeyType="done" - autoCapitalize="none" - textContentType="username" - clearButtonMode="while-editing" - maxLength={500} - /> - - setCredentials({ ...credentials, password: text }) - } - value={credentials.password} - secureTextEntry - keyboardType="default" - returnKeyType="done" - autoCapitalize="none" - textContentType="password" - clearButtonMode="while-editing" - maxLength={500} - /> - - - - ); - } - - return ( - - - Jellyfin - Enter a server adress - - - - - ); -}; - -export default Login; diff --git a/app/_layout.tsx b/app/_layout.tsx index 7afb1bcb..c81384f9 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -69,7 +69,6 @@ export default function RootLayout() { name="(auth)/settings" options={{ headerShown: true, - title: "Settings", presentation: "modal", headerLeft: () => ( @@ -106,7 +105,16 @@ export default function RootLayout() { }} /> + diff --git a/bun.lockb b/bun.lockb index 78c521dafc1d6bb70dd37839da22ef68a6acacc4..cd531206c35d46ab95e616414aa05ffc5c680f38 100755 GIT binary patch delta 120884 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≥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%0Ai}>QVpTyz4f96AqY|QdAw(^+ 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 PMq7m!+@~gMYy1CyhaC87 delta 107430 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 diff --git a/components/Button.tsx b/components/Button.tsx index 13fd3845..b7df4fd8 100644 --- a/components/Button.tsx +++ b/components/Button.tsx @@ -1,5 +1,6 @@ -import React, { PropsWithChildren, ReactNode } from "react"; +import React, { PropsWithChildren, ReactNode, useMemo } from "react"; import { TouchableOpacity, Text, ActivityIndicator, View } from "react-native"; +import * as Haptics from "expo-haptics"; interface ButtonProps { onPress?: () => void; @@ -8,6 +9,7 @@ interface ButtonProps { disabled?: boolean; children?: string; loading?: boolean; + color?: "purple" | "red"; iconRight?: ReactNode; } @@ -17,19 +19,32 @@ export const Button: React.FC> = ({ textClassName = "", disabled = false, loading = false, + color = "purple", iconRight, children, }) => { + const colorClasses = useMemo(() => { + switch (color) { + case "purple": + return "bg-purple-600 active:bg-purple-700"; + case "red": + return "bg-red-500 active:bg-red-600"; + } + }, [color]); + return ( { - if (!loading && !disabled && onPress) onPress(); + if (!loading && !disabled && onPress) { + onPress(); + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + } }} disabled={disabled || loading} > diff --git a/components/ContinueWatchingPoster.tsx b/components/ContinueWatchingPoster.tsx index cc677952..4fff599f 100644 --- a/components/ContinueWatchingPoster.tsx +++ b/components/ContinueWatchingPoster.tsx @@ -1,11 +1,14 @@ import { apiAtom } from "@/providers/JellyfinProvider"; import { getBackdrop } from "@/utils/jellyfin"; +import { Ionicons } from "@expo/vector-icons"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useQuery } from "@tanstack/react-query"; import { Image } from "expo-image"; import { useAtom } from "jotai"; import { useState } from "react"; import { View } from "react-native"; +import { Text } from "./common/Text"; +import { WatchedIndicator } from "./WatchedIndicator"; type ContinueWatchingPosterProps = { item: BaseItemDto; @@ -27,10 +30,13 @@ const ContinueWatchingPoster: React.FC = ({ item.UserData?.PlayedPercentage || 0 ); - if (!url) return ; + if (!url) + return ( + + ); return ( - + = ({ contentFit="cover" className="w-full h-full" /> + {progress > 0 && ( <> )} diff --git a/components/DownloadItem.tsx b/components/DownloadItem.tsx index 64218358..1e82feab 100644 --- a/components/DownloadItem.tsx +++ b/components/DownloadItem.tsx @@ -1,14 +1,15 @@ import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import * as FileSystem from "expo-file-system"; -import { atom, useAtom } from "jotai"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { writeToLog } from "@/utils/log"; import Ionicons from "@expo/vector-icons/Ionicons"; import AsyncStorage from "@react-native-async-storage/async-storage"; -import { FFmpegKit, FFmpegKitConfig, Session } from "ffmpeg-kit-react-native"; -import ProgressCircle from "./ProgressCircle"; +import * as FileSystem from "expo-file-system"; +import { FFmpegKit, FFmpegKitConfig } from "ffmpeg-kit-react-native"; +import { atom, useAtom } from "jotai"; +import { useCallback, useEffect, useState } from "react"; import { TouchableOpacity, View } from "react-native"; -import { Text } from "./common/Text"; +import ProgressCircle from "./ProgressCircle"; +import { router } from "expo-router"; type DownloadProps = { item: BaseItemDto; @@ -23,7 +24,13 @@ type ProcessItem = { export const runningProcesses = atom(null); const useRemuxHlsToMp4 = (inputUrl: string, item: BaseItemDto) => { - if (!item.Id || !item.Name) throw new Error("Item must have an Id and Name"); + if (!item.Id || !item.Name) { + writeToLog("ERROR", "useRemuxHlsToMp4 ~ missing arguments", { + item, + inputUrl, + }); + throw new Error("Item must have an Id and Name"); + } const [session, setSession] = useAtom(runningProcesses); @@ -32,8 +39,26 @@ const useRemuxHlsToMp4 = (inputUrl: string, item: BaseItemDto) => { const command = `-y -fflags +genpts -i ${inputUrl} -c copy -max_muxing_queue_size 9999 ${output}`; const startRemuxing = useCallback(async () => { - if (!item.Id || !item.Name) + if (!item.Id || !item.Name) { + writeToLog( + "ERROR", + "useRemuxHlsToMp4 ~ startRemuxing ~ missing arguments", + { + item, + inputUrl, + } + ); throw new Error("Item must have an Id and Name"); + } + + writeToLog( + "INFO", + `useRemuxHlsToMp4 ~ startRemuxing for item ${item.Id} with url ${inputUrl}`, + { + item, + inputUrl, + } + ); try { setSession({ @@ -55,14 +80,6 @@ const useRemuxHlsToMp4 = (inputUrl: string, item: BaseItemDto) => { percentage = Math.floor((processedFrames / totalFrames) * 100); } - console.log({ - videoLength, - fps, - totalFrames, - processedFrames: statistics.getVideoFrameNumber(), - percentage, - }); - setSession((prev) => { return prev?.item.Id === item.Id! ? { ...prev, progress: percentage } @@ -84,18 +101,49 @@ const useRemuxHlsToMp4 = (inputUrl: string, item: BaseItemDto) => { JSON.stringify([...otherItems, item]) ); - console.log("Remuxing completed successfully"); + writeToLog( + "INFO", + `useRemuxHlsToMp4 ~ remuxing completed successfully for item: ${item.Name}`, + { + item, + inputUrl, + } + ); setSession(null); } else if (returnCode.isValueError()) { console.error("Failed to remux:"); + writeToLog( + "ERROR", + `useRemuxHlsToMp4 ~ remuxing failed for item: ${item.Name}`, + { + item, + inputUrl, + } + ); setSession(null); } else if (returnCode.isValueCancel()) { console.log("Remuxing was cancelled"); + writeToLog( + "INFO", + `useRemuxHlsToMp4 ~ remuxing was canceled for item: ${item.Name}`, + { + item, + inputUrl, + } + ); setSession(null); } }); } catch (error) { console.error("Failed to remux:", error); + writeToLog( + "ERROR", + `useRemuxHlsToMp4 ~ remuxing failed for item: ${item.Name}`, + { + item, + inputUrl, + } + ); } }, [inputUrl, output, item, command]); @@ -142,6 +190,7 @@ export const DownloadItem: React.FC = ({ url, item }) => { onPress={() => { cancelRemuxing(); }} + className="-rotate-45" > = ({ url, item }) => { /> ) : downloaded ? ( - <> - - + { + router.push( + `/(auth)/player/offline/page?url=${item.Id}.mp4&itemId=${item.Id}` + ); + }} + > + + ) : ( { startRemuxing(); }} > - + )} diff --git a/components/ItemCardText.tsx b/components/ItemCardText.tsx index d9333761..f089ab72 100644 --- a/components/ItemCardText.tsx +++ b/components/ItemCardText.tsx @@ -1,9 +1,10 @@ import React from "react"; import { View } from "react-native"; import { Text } from "./common/Text"; +import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; type ItemCardProps = { - item: any; + item: BaseItemDto; }; export const ItemCardText: React.FC = ({ item }) => { @@ -16,17 +17,17 @@ export const ItemCardText: React.FC = ({ item }) => { style={{ flexWrap: "wrap" }} className="flex text-xs opacity-50 break-all" > - {`S${item.SeasonName?.replace("Season ", "").padStart( - 2, - "0" - )}:E${item.IndexNumber.toString().padStart(2, "0")}`}{" "} + {`S${item.SeasonName?.replace( + "Season ", + "" + )}:E${item.IndexNumber?.toString()}`}{" "} {item.Name} ) : ( <> {item.Name} - + {item.ProductionYear} )} diff --git a/components/MoviePoster.tsx b/components/MoviePoster.tsx index ba46b5f6..ba2c32b1 100644 --- a/components/MoviePoster.tsx +++ b/components/MoviePoster.tsx @@ -1,22 +1,27 @@ import { apiAtom } from "@/providers/JellyfinProvider"; -import { getBackdrop } from "@/utils/jellyfin"; +import { getBackdrop, getPrimaryImageById } from "@/utils/jellyfin"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useQuery } from "@tanstack/react-query"; import { Image } from "expo-image"; import { useAtom } from "jotai"; -import { useEffect, useState } from "react"; +import { useState } from "react"; import { View } from "react-native"; +import { WatchedIndicator } from "./WatchedIndicator"; type MoviePosterProps = { item: BaseItemDto; + showProgress?: boolean; }; -const MoviePoster: React.FC = ({ item }) => { +const MoviePoster: React.FC = ({ + item, + showProgress = false, +}) => { const [api] = useAtom(apiAtom); const { data: url } = useQuery({ queryKey: ["backdrop", item.Id], - queryFn: async () => getBackdrop(api, item), + queryFn: async () => getPrimaryImageById(api, item.Id), enabled: !!api && !!item.Id, staleTime: Infinity, }); @@ -25,10 +30,18 @@ const MoviePoster: React.FC = ({ item }) => { item.UserData?.PlayedPercentage || 0 ); - if (!url) return ; + if (!url) + return ( + + ); return ( - + = ({ item }) => { aspectRatio: "10/15", }} /> - {progress > 0 && } + + {showProgress && progress > 0 && ( + + )} ); }; diff --git a/components/OfflineVideoPlayer.tsx b/components/OfflineVideoPlayer.tsx index 84d0021c..4e2df40e 100644 --- a/components/OfflineVideoPlayer.tsx +++ b/components/OfflineVideoPlayer.tsx @@ -8,10 +8,8 @@ type VideoPlayerProps = { export const OfflineVideoPlayer: React.FC = ({ url }) => { const videoRef = useRef(null); - console.log(url); - const onError = (error: any) => { - console.log("Video Error: ", error); + console.error("Video Error: ", error); }; useEffect(() => { diff --git a/components/PlayedStatus.tsx b/components/PlayedStatus.tsx new file mode 100644 index 00000000..e64d03c0 --- /dev/null +++ b/components/PlayedStatus.tsx @@ -0,0 +1,58 @@ +import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; +import { markAsNotPlayed, markAsPlayed } from "@/utils/jellyfin"; +import { Ionicons } from "@expo/vector-icons"; +import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; +import { useQueryClient, InvalidateQueryFilters } from "@tanstack/react-query"; +import { useAtom } from "jotai"; +import React from "react"; +import { TouchableOpacity, View } from "react-native"; +import * as Haptics from "expo-haptics"; + +export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => { + const [api] = useAtom(apiAtom); + const [user] = useAtom(userAtom); + + console.log("PlayedStatus", item.UserData); + + const queryClient = useQueryClient(); + + return ( + + {item.UserData?.Played ? ( + { + markAsNotPlayed({ + api: api, + itemId: item?.Id, + userId: user?.Id, + }); + queryClient.invalidateQueries({ + queryKey: ["item", item.Id], + refetchType: "all", + }); + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }} + > + + + ) : ( + { + markAsPlayed({ + api: api, + itemId: item?.Id, + userId: user?.Id, + }); + queryClient.invalidateQueries({ + queryKey: ["item", item.Id], + refetchType: "all", + }); + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }} + > + + + )} + + ); +}; diff --git a/components/Poster.tsx b/components/Poster.tsx new file mode 100644 index 00000000..456b0653 --- /dev/null +++ b/components/Poster.tsx @@ -0,0 +1,51 @@ +import { apiAtom } from "@/providers/JellyfinProvider"; +import { getPrimaryImageById } from "@/utils/jellyfin"; +import { useQuery } from "@tanstack/react-query"; +import { Image } from "expo-image"; +import { useAtom } from "jotai"; +import { View } from "react-native"; + +type PosterProps = { + itemId?: string | null; + showProgress?: boolean; +}; + +const Poster: React.FC = ({ itemId }) => { + const [api] = useAtom(apiAtom); + + const { data: url } = useQuery({ + queryKey: ["backdrop", itemId], + queryFn: async () => getPrimaryImageById(api, itemId), + enabled: !!api && !!itemId, + staleTime: Infinity, + }); + + if (!url || !itemId) + return ( + + ); + + return ( + + + + ); +}; + +export default Poster; diff --git a/components/ProgressCircle.tsx b/components/ProgressCircle.tsx index 21217b0c..20c4fbd3 100644 --- a/components/ProgressCircle.tsx +++ b/components/ProgressCircle.tsx @@ -24,6 +24,7 @@ const ProgressCircle: React.FC = ({ fill={fill} tintColor={tintColor} backgroundColor={backgroundColor} + rotation={45} /> ); }; diff --git a/components/SimilarItems.tsx b/components/SimilarItems.tsx index b9cbc3ef..1ce1f5d2 100644 --- a/components/SimilarItems.tsx +++ b/components/SimilarItems.tsx @@ -61,7 +61,9 @@ export const SimilarItems: React.FC = ({ itemId }) => { )} - {similarItems?.length === 0 && No similar items} + {similarItems?.length === 0 && ( + No similar items + )} ); }; diff --git a/components/VerticalPoster.tsx b/components/VerticalPoster.tsx deleted file mode 100644 index 6e059ad0..00000000 --- a/components/VerticalPoster.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { apiAtom } from "@/providers/JellyfinProvider"; -import { getBackdrop } from "@/utils/jellyfin"; -import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { useQuery } from "@tanstack/react-query"; -import { Image } from "expo-image"; -import { useAtom } from "jotai"; -import { View } from "react-native"; - -type VerticalPosterProps = { - item: BaseItemDto; -}; - -const VerticalPoster: React.FC = ({ item }) => { - const [api] = useAtom(apiAtom); - - const { data: url } = useQuery({ - queryKey: ["backdrop", item.Id], - queryFn: async () => getBackdrop(api, item), - enabled: !!api && !!item.Id, - staleTime: Infinity, - }); - - if (!url) return null; - - return ( - - - - ); -}; - -export default VerticalPoster; diff --git a/components/VideoPlayer.tsx b/components/VideoPlayer.tsx index 4384fcf0..6bc64533 100644 --- a/components/VideoPlayer.tsx +++ b/components/VideoPlayer.tsx @@ -1,6 +1,11 @@ -import React, { useEffect, useRef, useState } from "react"; -import { ActivityIndicator, TouchableOpacity, View } from "react-native"; - +import React, { useEffect, useMemo, useRef, useState } from "react"; +import { + ActivityIndicator, + Switch, + TouchableOpacity, + View, +} from "react-native"; +import * as DropdownMenu from "zeego/dropdown-menu"; import { getMediaInfoApi } from "@jellyfin/sdk/lib/utils/api"; import { useQuery } from "@tanstack/react-query"; import { useAtom } from "jotai"; @@ -15,20 +20,52 @@ import { getStreamUrl, getUserItemData, reportPlaybackProgress, + reportPlaybackStopped, } from "@/utils/jellyfin"; import { Ionicons } from "@expo/vector-icons"; import { Button } from "./Button"; import { runtimeTicksToMinutes } from "@/utils/time"; +import { Text } from "./common/Text"; type VideoPlayerProps = { itemId: string; }; +const BITRATES = [ + { + key: "Max", + value: 140000000, + }, + { + key: "10 Mb/s", + value: 10000000, + }, + { + key: "4 Mb/s", + value: 4000000, + }, + { + key: "2 Mb/s", + value: 2000000, + }, + { + key: "1 Mb/s", + value: 1000000, + }, + { + key: "500 Kb/s", + value: 500000, + }, +]; + export const VideoPlayer: React.FC = ({ itemId }) => { const videoRef = useRef(null); const [showPoster, setShowPoster] = useState(true); const [isPlaying, setIsPlaying] = useState(false); const [buffering, setBuffering] = useState(false); + const [maxBitrate, setMaxbitrate] = useState(140000000); + const [paused, setPaused] = useState(true); + const [forceTranscoding, setForceTranscoding] = useState(false); const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); @@ -61,40 +98,36 @@ export const VideoPlayer: React.FC = ({ itemId }) => { staleTime: Infinity, }); - useEffect(() => { - console.log(item?.UserData?.PlaybackPositionTicks); - console.log(item?.UserData?.PlayedPercentage); - }, [item]); - const { data: playbackURL } = useQuery({ - queryKey: ["playbackUrl", itemId], + queryKey: ["playbackUrl", itemId, maxBitrate, forceTranscoding], queryFn: async () => { - if (!api || !user?.Id) return; - return ( - (await getStreamUrl({ - api, - userId: user.Id, - item, - startTimeTicks: item?.UserData?.PlaybackPositionTicks || 0, - })) || undefined - ); + if (!api || !user?.Id) return null; + + const url = await getStreamUrl({ + api, + userId: user.Id, + item, + startTimeTicks: item?.UserData?.PlaybackPositionTicks || 0, + maxStreamingBitrate: maxBitrate, + forceTranscoding: forceTranscoding, + }); + + console.log("Transcode URL:", url); + + return url; }, enabled: !!itemId && !!api && !!user?.Id && !!item, - staleTime: Infinity, + staleTime: 0, }); - const { data: posterUrl } = useQuery({ - queryKey: ["backdrop", item?.Id], - queryFn: async () => getBackdrop(api, item), - enabled: !!api && !!item?.Id, - staleTime: Infinity, - }); + const [progress, setProgress] = useState(0); const onProgress = ({ currentTime, playableDuration, seekableDuration, }: OnProgressData) => { + setProgress(currentTime * 10000000); reportPlaybackProgress({ api, itemId: itemId, @@ -110,11 +143,11 @@ export const VideoPlayer: React.FC = ({ itemId }) => { currentTime: number; seekTime: number; }) => { - console.log("Seek to time: ", seekTime); + // console.log("Seek to time: ", seekTime); }; const onError = (error: any) => { - console.log("Video Error: ", error); + // console.log("Video Error: ", error); }; const play = () => { @@ -123,45 +156,110 @@ export const VideoPlayer: React.FC = ({ itemId }) => { } }; + const startPosition = useMemo(() => { + return Math.round((item?.UserData?.PlaybackPositionTicks || 0) / 10000); + }, [item]); + useEffect(() => { if (videoRef.current) { videoRef.current.pause(); } }, []); - if (!playbackURL) return null; + const enableVideo = useMemo(() => { + return ( + playbackURL !== undefined && + item !== undefined && + item !== null && + startPosition !== undefined && + sessionData !== undefined + ); + }, [playbackURL, item, startPosition, sessionData]); return ( -