diff --git a/app/(auth)/downloads.tsx b/app/(auth)/downloads.tsx index efb22e65..8c3e6101 100644 --- a/app/(auth)/downloads.tsx +++ b/app/(auth)/downloads.tsx @@ -41,16 +41,6 @@ const downloads: React.FC = () => { return Object.values(series); }, [downloadedFiles]); - useEffect(() => { - console.log( - downloadedFiles?.map((i) => ({ - name: i.Name, - codec: i.SourceType, - media: i.MediaSources?.[0].Container, - })), - ); - }, [downloadedFiles]); - const [process, setProcess] = useAtom(runningProcesses); if (isLoading) { diff --git a/app/(auth)/player/offline/page.tsx b/app/(auth)/player/offline/page.tsx index 6462972e..9e6de504 100644 --- a/app/(auth)/player/offline/page.tsx +++ b/app/(auth)/player/offline/page.tsx @@ -10,7 +10,6 @@ export default function page() { const fileUrl = useMemo(() => { const u = FileSystem.documentDirectory + url; - console.log({ u }); return u; }, [url]); diff --git a/bun.lockb b/bun.lockb index 21c51013..4b8bd06f 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components/Chromecast.tsx b/components/Chromecast.tsx index 9dc0afef..4286b64e 100644 --- a/components/Chromecast.tsx +++ b/components/Chromecast.tsx @@ -1,7 +1,5 @@ -import { Feather, FontAwesome, Ionicons } from "@expo/vector-icons"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import React, { useEffect } from "react"; -import { TouchableOpacity, View } from "react-native"; import { CastButton, useCastDevice, @@ -9,14 +7,13 @@ import { useRemoteMediaClient, } from "react-native-google-cast"; import GoogleCast from "react-native-google-cast"; -import { Text } from "./common/Text"; type Props = { item?: BaseItemDto | null; startTimeTicks?: number | null; }; -export const Chromecast: React.FC = ({ item, startTimeTicks }) => { +export const Chromecast: React.FC = () => { const client = useRemoteMediaClient(); const castDevice = useCastDevice(); const devices = useDevices(); @@ -26,43 +23,12 @@ export const Chromecast: React.FC = ({ item, startTimeTicks }) => { useEffect(() => { (async () => { if (!discoveryManager) { - console.log("No discoveryManager client"); return; } await discoveryManager.startDiscovery(); - - const started = await discoveryManager.isRunning(); - - console.log({ - devices, - castDevice, - sessionManager, - }); })(); }, [client, devices, castDevice, sessionManager, discoveryManager]); - const cast = () => { - if (!client) { - console.log("No chromecast client"); - return; - } - - client.loadMedia({ - mediaInfo: { - contentUrl: - "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4", - contentType: "video/mp4", - metadata: { - type: item?.Type === "Episode" ? "tvShow" : "movie", - title: item?.Name || "", - subtitle: item?.Overview || "", - }, - streamDuration: Math.floor((item?.RunTimeTicks || 0) / 10000), - }, - startTime: Math.floor((startTimeTicks || 0) / 10000), - }); - }; - return ; }; diff --git a/components/DownloadItem.tsx b/components/DownloadItem.tsx index 4877804b..fbf04d59 100644 --- a/components/DownloadItem.tsx +++ b/components/DownloadItem.tsx @@ -42,8 +42,6 @@ export const DownloadItem: React.FC = ({ const source = playbackInfo.MediaSources?.[0]; - console.log("Source:", JSON.stringify(source)); - if (source?.SupportsDirectPlay && item.CanDownload) { downloadMedia(item); } else { diff --git a/components/PlayedStatus.tsx b/components/PlayedStatus.tsx index 6d4a0c30..9901f5a1 100644 --- a/components/PlayedStatus.tsx +++ b/components/PlayedStatus.tsx @@ -1,13 +1,13 @@ import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; +import { markAsNotPlayed } from "@/utils/jellyfin/playstate/markAsNotPlayed"; +import { markAsPlayed } from "@/utils/jellyfin/playstate/markAsPlayed"; import { Ionicons } from "@expo/vector-icons"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { useQueryClient, InvalidateQueryFilters } from "@tanstack/react-query"; +import { useQueryClient } from "@tanstack/react-query"; +import * as Haptics from "expo-haptics"; import { useAtom } from "jotai"; import React, { useCallback } from "react"; import { TouchableOpacity, View } from "react-native"; -import * as Haptics from "expo-haptics"; -import { markAsNotPlayed } from "@/utils/jellyfin/playstate/markAsNotPlayed"; -import { markAsPlayed } from "@/utils/jellyfin/playstate/markAsPlayed"; export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => { const [api] = useAtom(apiAtom); @@ -18,23 +18,18 @@ export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => { const invalidateQueries = useCallback(() => { queryClient.invalidateQueries({ queryKey: ["item", item.Id], - refetchType: "all", }); queryClient.invalidateQueries({ queryKey: ["resumeItems", user?.Id], - refetchType: "all", }); queryClient.invalidateQueries({ queryKey: ["nextUp", item.SeriesId], - refetchType: "all", }); queryClient.invalidateQueries({ queryKey: ["episodes"], - refetchType: "all", }); queryClient.invalidateQueries({ queryKey: ["seasons"], - refetchType: "all", }); }, [api, item.Id, queryClient, user?.Id]); @@ -42,13 +37,13 @@ export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => { {item.UserData?.Played ? ( { - markAsNotPlayed({ + onPress={async () => { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + await markAsNotPlayed({ api: api, itemId: item?.Id, userId: user?.Id, }); - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); invalidateQueries(); }} > @@ -56,13 +51,13 @@ export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => { ) : ( { - markAsPlayed({ + onPress={async () => { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + await markAsPlayed({ api: api, item: item, userId: user?.Id, }); - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); invalidateQueries(); }} > diff --git a/components/VideoPlayer.tsx b/components/VideoPlayer.tsx index 299fc5fc..eccb6440 100644 --- a/components/VideoPlayer.tsx +++ b/components/VideoPlayer.tsx @@ -105,8 +105,6 @@ export const VideoPlayer: React.FC = ({ deviceProfile: castDevice?.deviceId ? chromecastProfile : ios12, }); - console.log("Transcode URL:", url); - onChangePlaybackURL(url); return url; diff --git a/package.json b/package.json index 6d0e5577..ef306020 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "expo-font": "~12.0.9", "expo-haptics": "~13.0.1", "expo-image": "~1.12.13", + "expo-keep-awake": "~13.0.2", "expo-linking": "~6.3.1", "expo-router": "~3.5.20", "expo-splash-screen": "~0.27.5", diff --git a/utils/jellyfin/playstate/markAsNotPlayed.ts b/utils/jellyfin/playstate/markAsNotPlayed.ts index 437299f8..c84ceb8a 100644 --- a/utils/jellyfin/playstate/markAsNotPlayed.ts +++ b/utils/jellyfin/playstate/markAsNotPlayed.ts @@ -17,14 +17,14 @@ export const markAsNotPlayed = async ({ api, itemId, userId, -}: MarkAsNotPlayedParams): Promise => { +}: MarkAsNotPlayedParams): Promise => { if (!api || !itemId || !userId) { console.error("Invalid parameters for markAsNotPlayed"); - return false; + return; } try { - const response = await api.axiosInstance.delete( + await api.axiosInstance.delete( `${api.basePath}/UserPlayedItems/${itemId}`, { params: { userId }, @@ -33,8 +33,6 @@ export const markAsNotPlayed = async ({ }, }, ); - - return response.status === 200; } catch (error) { const axiosError = error as AxiosError; console.error( @@ -42,6 +40,6 @@ export const markAsNotPlayed = async ({ axiosError.message, axiosError.response?.status, ); - return false; + return; } }; diff --git a/utils/jellyfin/playstate/reportPlaybackProgress.ts b/utils/jellyfin/playstate/reportPlaybackProgress.ts index 7aebc80c..a30ba666 100644 --- a/utils/jellyfin/playstate/reportPlaybackProgress.ts +++ b/utils/jellyfin/playstate/reportPlaybackProgress.ts @@ -39,6 +39,6 @@ export const reportPlaybackProgress = async ({ { headers: getAuthHeaders(api) }, ); } catch (error) { - console.log(error); + console.error(error); } }; diff --git a/utils/jellyfin/playstate/reportPlaybackStopped.ts b/utils/jellyfin/playstate/reportPlaybackStopped.ts index f5e16abc..fe688ab0 100644 --- a/utils/jellyfin/playstate/reportPlaybackStopped.ts +++ b/utils/jellyfin/playstate/reportPlaybackStopped.ts @@ -26,7 +26,7 @@ export const reportPlaybackStopped = async ({ }: PlaybackStoppedParams): Promise => { // Validate input parameters if (!api || !sessionId || !itemId || !positionTicks) { - console.log("Missing required parameters", { + console.error("Missing required parameters", { api, sessionId, itemId,