fix(player): add null guards for item in play settings

This commit is contained in:
Fredrik Burmester
2026-01-16 21:26:56 +01:00
parent 9509a427c8
commit 56ffec3173
4 changed files with 18 additions and 10 deletions

View File

@@ -86,7 +86,7 @@ const Page: React.FC = () => {
<View style={{ paddingHorizontal: 16, width: "100%" }}>
<View
style={{
height: item?.Type === "Episode" ? 300 : 450,
height: 450,
}}
className='bg-transparent rounded-lg mb-4 w-full'
/>

View File

@@ -838,23 +838,23 @@ export const ItemContentTV: React.FC<ItemContentTVProps> = React.memo(
}, [selectedOptions?.bitrate?.key, t]);
// Format year and duration
const year = item.ProductionYear;
const duration = item.RunTimeTicks
const year = item?.ProductionYear;
const duration = item?.RunTimeTicks
? runtimeTicksToMinutes(item.RunTimeTicks)
: null;
const hasProgress = (item.UserData?.PlaybackPositionTicks ?? 0) > 0;
const hasProgress = (item?.UserData?.PlaybackPositionTicks ?? 0) > 0;
const remainingTime = hasProgress
? runtimeTicksToMinutes(
(item.RunTimeTicks || 0) -
(item.UserData?.PlaybackPositionTicks || 0),
(item?.RunTimeTicks || 0) -
(item?.UserData?.PlaybackPositionTicks || 0),
)
: null;
// Get director
const director = item.People?.find((p) => p.Type === "Director");
const director = item?.People?.find((p) => p.Type === "Director");
// Get cast (first 3)
const cast = item.People?.filter((p) => p.Type === "Actor")?.slice(0, 3);
const cast = item?.People?.filter((p) => p.Type === "Actor")?.slice(0, 3);
if (!item || !selectedOptions) return null;

View File

@@ -7,7 +7,10 @@ import { getDefaultPlaySettings } from "@/utils/jellyfin/getDefaultPlaySettings"
* React hook wrapper for getDefaultPlaySettings.
* Used in UI components for initial playback (no previous track state).
*/
const useDefaultPlaySettings = (item: BaseItemDto, settings: Settings | null) =>
const useDefaultPlaySettings = (
item: BaseItemDto | null | undefined,
settings: Settings | null,
) =>
useMemo(() => {
const { mediaSource, audioIndex, subtitleIndex, bitrate } =
getDefaultPlaySettings(item, settings);

View File

@@ -42,12 +42,17 @@ export interface PreviousIndexes {
* @param previous - Optional previous track selections to carry over (for sequential play)
*/
export function getDefaultPlaySettings(
item: BaseItemDto,
item: BaseItemDto | null | undefined,
settings: Settings | null,
previous?: { indexes?: PreviousIndexes; source?: MediaSourceInfo },
): PlaySettings {
const bitrate = settings?.defaultBitrate ?? BITRATES[0];
// Handle undefined/null item
if (!item) {
return { item: {} as BaseItemDto, bitrate };
}
// Live TV programs don't have media sources
if (item.Type === "Program") {
return { item, bitrate };