From f4e3a2805669e6c2c71cd28ddde7a2c8185a3d8f Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Fri, 9 Aug 2024 18:45:53 +0200 Subject: [PATCH] chore: code improvements refactor --- app/(auth)/downloads.tsx | 10 ----- app/(auth)/player/offline/page.tsx | 1 - bun.lockb | Bin 536136 -> 536168 bytes components/Chromecast.tsx | 36 +----------------- components/DownloadItem.tsx | 2 - components/PlayedStatus.tsx | 25 +++++------- components/VideoPlayer.tsx | 2 - package.json | 1 + utils/jellyfin/playstate/markAsNotPlayed.ts | 10 ++--- .../playstate/reportPlaybackProgress.ts | 2 +- .../playstate/reportPlaybackStopped.ts | 2 +- 11 files changed, 18 insertions(+), 73 deletions(-) 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 21c510135bab994641e53325c6c978bdaa7aab00..4b8bd06f5a71aaedc28545f18d027d9591e36cbf 100755 GIT binary patch delta 55646 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 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,