chore: code improvements refactor

This commit is contained in:
Fredrik Burmester
2024-08-09 18:45:53 +02:00
parent c985acb9cd
commit f4e3a28056
11 changed files with 18 additions and 73 deletions

View File

@@ -41,16 +41,6 @@ const downloads: React.FC = () => {
return Object.values(series); return Object.values(series);
}, [downloadedFiles]); }, [downloadedFiles]);
useEffect(() => {
console.log(
downloadedFiles?.map((i) => ({
name: i.Name,
codec: i.SourceType,
media: i.MediaSources?.[0].Container,
})),
);
}, [downloadedFiles]);
const [process, setProcess] = useAtom(runningProcesses); const [process, setProcess] = useAtom(runningProcesses);
if (isLoading) { if (isLoading) {

View File

@@ -10,7 +10,6 @@ export default function page() {
const fileUrl = useMemo(() => { const fileUrl = useMemo(() => {
const u = FileSystem.documentDirectory + url; const u = FileSystem.documentDirectory + url;
console.log({ u });
return u; return u;
}, [url]); }, [url]);

BIN
bun.lockb

Binary file not shown.

View File

@@ -1,7 +1,5 @@
import { Feather, FontAwesome, Ionicons } from "@expo/vector-icons";
import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { TouchableOpacity, View } from "react-native";
import { import {
CastButton, CastButton,
useCastDevice, useCastDevice,
@@ -9,14 +7,13 @@ import {
useRemoteMediaClient, useRemoteMediaClient,
} from "react-native-google-cast"; } from "react-native-google-cast";
import GoogleCast from "react-native-google-cast"; import GoogleCast from "react-native-google-cast";
import { Text } from "./common/Text";
type Props = { type Props = {
item?: BaseItemDto | null; item?: BaseItemDto | null;
startTimeTicks?: number | null; startTimeTicks?: number | null;
}; };
export const Chromecast: React.FC<Props> = ({ item, startTimeTicks }) => { export const Chromecast: React.FC<Props> = () => {
const client = useRemoteMediaClient(); const client = useRemoteMediaClient();
const castDevice = useCastDevice(); const castDevice = useCastDevice();
const devices = useDevices(); const devices = useDevices();
@@ -26,43 +23,12 @@ export const Chromecast: React.FC<Props> = ({ item, startTimeTicks }) => {
useEffect(() => { useEffect(() => {
(async () => { (async () => {
if (!discoveryManager) { if (!discoveryManager) {
console.log("No discoveryManager client");
return; return;
} }
await discoveryManager.startDiscovery(); await discoveryManager.startDiscovery();
const started = await discoveryManager.isRunning();
console.log({
devices,
castDevice,
sessionManager,
});
})(); })();
}, [client, devices, castDevice, sessionManager, discoveryManager]); }, [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 <CastButton style={{ tintColor: "white", height: 48, width: 48 }} />; return <CastButton style={{ tintColor: "white", height: 48, width: 48 }} />;
}; };

View File

@@ -42,8 +42,6 @@ export const DownloadItem: React.FC<DownloadProps> = ({
const source = playbackInfo.MediaSources?.[0]; const source = playbackInfo.MediaSources?.[0];
console.log("Source:", JSON.stringify(source));
if (source?.SupportsDirectPlay && item.CanDownload) { if (source?.SupportsDirectPlay && item.CanDownload) {
downloadMedia(item); downloadMedia(item);
} else { } else {

View File

@@ -1,13 +1,13 @@
import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; 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 { Ionicons } from "@expo/vector-icons";
import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; 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 { useAtom } from "jotai";
import React, { useCallback } from "react"; import React, { useCallback } from "react";
import { TouchableOpacity, View } from "react-native"; 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 }) => { export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => {
const [api] = useAtom(apiAtom); const [api] = useAtom(apiAtom);
@@ -18,23 +18,18 @@ export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => {
const invalidateQueries = useCallback(() => { const invalidateQueries = useCallback(() => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: ["item", item.Id], queryKey: ["item", item.Id],
refetchType: "all",
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: ["resumeItems", user?.Id], queryKey: ["resumeItems", user?.Id],
refetchType: "all",
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: ["nextUp", item.SeriesId], queryKey: ["nextUp", item.SeriesId],
refetchType: "all",
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: ["episodes"], queryKey: ["episodes"],
refetchType: "all",
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: ["seasons"], queryKey: ["seasons"],
refetchType: "all",
}); });
}, [api, item.Id, queryClient, user?.Id]); }, [api, item.Id, queryClient, user?.Id]);
@@ -42,13 +37,13 @@ export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => {
<View> <View>
{item.UserData?.Played ? ( {item.UserData?.Played ? (
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={async () => {
markAsNotPlayed({ Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
await markAsNotPlayed({
api: api, api: api,
itemId: item?.Id, itemId: item?.Id,
userId: user?.Id, userId: user?.Id,
}); });
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
invalidateQueries(); invalidateQueries();
}} }}
> >
@@ -56,13 +51,13 @@ export const PlayedStatus: React.FC<{ item: BaseItemDto }> = ({ item }) => {
</TouchableOpacity> </TouchableOpacity>
) : ( ) : (
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={async () => {
markAsPlayed({ Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
await markAsPlayed({
api: api, api: api,
item: item, item: item,
userId: user?.Id, userId: user?.Id,
}); });
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
invalidateQueries(); invalidateQueries();
}} }}
> >

View File

@@ -105,8 +105,6 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
deviceProfile: castDevice?.deviceId ? chromecastProfile : ios12, deviceProfile: castDevice?.deviceId ? chromecastProfile : ios12,
}); });
console.log("Transcode URL:", url);
onChangePlaybackURL(url); onChangePlaybackURL(url);
return url; return url;

View File

@@ -32,6 +32,7 @@
"expo-font": "~12.0.9", "expo-font": "~12.0.9",
"expo-haptics": "~13.0.1", "expo-haptics": "~13.0.1",
"expo-image": "~1.12.13", "expo-image": "~1.12.13",
"expo-keep-awake": "~13.0.2",
"expo-linking": "~6.3.1", "expo-linking": "~6.3.1",
"expo-router": "~3.5.20", "expo-router": "~3.5.20",
"expo-splash-screen": "~0.27.5", "expo-splash-screen": "~0.27.5",

View File

@@ -17,14 +17,14 @@ export const markAsNotPlayed = async ({
api, api,
itemId, itemId,
userId, userId,
}: MarkAsNotPlayedParams): Promise<boolean> => { }: MarkAsNotPlayedParams): Promise<void> => {
if (!api || !itemId || !userId) { if (!api || !itemId || !userId) {
console.error("Invalid parameters for markAsNotPlayed"); console.error("Invalid parameters for markAsNotPlayed");
return false; return;
} }
try { try {
const response = await api.axiosInstance.delete( await api.axiosInstance.delete(
`${api.basePath}/UserPlayedItems/${itemId}`, `${api.basePath}/UserPlayedItems/${itemId}`,
{ {
params: { userId }, params: { userId },
@@ -33,8 +33,6 @@ export const markAsNotPlayed = async ({
}, },
}, },
); );
return response.status === 200;
} catch (error) { } catch (error) {
const axiosError = error as AxiosError; const axiosError = error as AxiosError;
console.error( console.error(
@@ -42,6 +40,6 @@ export const markAsNotPlayed = async ({
axiosError.message, axiosError.message,
axiosError.response?.status, axiosError.response?.status,
); );
return false; return;
} }
}; };

View File

@@ -39,6 +39,6 @@ export const reportPlaybackProgress = async ({
{ headers: getAuthHeaders(api) }, { headers: getAuthHeaders(api) },
); );
} catch (error) { } catch (error) {
console.log(error); console.error(error);
} }
}; };

View File

@@ -26,7 +26,7 @@ export const reportPlaybackStopped = async ({
}: PlaybackStoppedParams): Promise<void> => { }: PlaybackStoppedParams): Promise<void> => {
// Validate input parameters // Validate input parameters
if (!api || !sessionId || !itemId || !positionTicks) { if (!api || !sessionId || !itemId || !positionTicks) {
console.log("Missing required parameters", { console.error("Missing required parameters", {
api, api,
sessionId, sessionId,
itemId, itemId,