diff --git a/components/ItemContent.tsx b/components/ItemContent.tsx index aee6cad0..6b752e75 100644 --- a/components/ItemContent.tsx +++ b/components/ItemContent.tsx @@ -26,7 +26,7 @@ import { useFocusEffect, useNavigation } from "expo-router"; import * as ScreenOrientation from "expo-screen-orientation"; import { useAtom } from "jotai"; import React, { useCallback, useEffect, useMemo, useState } from "react"; -import { View } from "react-native"; +import { Alert, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { Chromecast } from "./Chromecast"; import { ItemHeader } from "./ItemHeader"; @@ -59,6 +59,11 @@ export const ItemContent: React.FC<{ item: BaseItemDto }> = React.memo( audioIndex, subtitleIndex, }); + + if (!mediaSource) { + Alert.alert("Error", "No media source found for this item."); + navigation.goBack(); + } }, [item, settings]) ); diff --git a/utils/jellyfin/getDefaultPlaySettings.ts b/utils/jellyfin/getDefaultPlaySettings.ts index b877283e..eff91a3f 100644 --- a/utils/jellyfin/getDefaultPlaySettings.ts +++ b/utils/jellyfin/getDefaultPlaySettings.ts @@ -9,7 +9,7 @@ import { Settings } from "../atoms/settings"; interface PlaySettings { item: BaseItemDto; bitrate: (typeof BITRATES)[0]; - mediaSource: MediaSourceInfo | undefined; + mediaSource?: MediaSourceInfo | null; audioIndex?: number | null; subtitleIndex?: number | null; } @@ -29,9 +29,8 @@ export function getDefaultPlaySettings( } // 1. Get first media source - const mediaSource = item.MediaSources?.[0]; - if (!mediaSource) throw new Error("No media source found"); + const mediaSource = item.MediaSources?.[0]; // 2. Get default or preferred audio const defaultAudioIndex = mediaSource?.DefaultAudioStreamIndex;