mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-05-26 16:56:39 +01:00
fix(chromecast): resolve TypeScript errors and improve type safety
- Fix deviceName property to use friendlyName - Update disconnect to use stop() instead of endSession() - Fix null handling in getPosterUrl and useTrickplay - Remove unused variables and imports - Add proper null checks in segment skipping - Disable auto-skip until settings are available
This commit is contained in:
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
import { Ionicons } from "@expo/vector-icons";
|
import { Ionicons } from "@expo/vector-icons";
|
||||||
import { Image } from "expo-image";
|
import { Image } from "expo-image";
|
||||||
import { useRouter } from "expo-router";
|
|
||||||
import { useAtomValue } from "jotai";
|
import { useAtomValue } from "jotai";
|
||||||
import React, { useCallback, useMemo, useState } from "react";
|
import React, { useCallback, useMemo, useState } from "react";
|
||||||
import {
|
import {
|
||||||
@@ -48,9 +47,8 @@ export const ChromecastPlayer: React.FC<ChromecastPlayerProps> = ({
|
|||||||
visible,
|
visible,
|
||||||
onClose,
|
onClose,
|
||||||
}) => {
|
}) => {
|
||||||
const _router = useRouter();
|
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
const { height: screenHeight, width: screenWidth } = useWindowDimensions();
|
const { height: screenHeight } = useWindowDimensions();
|
||||||
const api = useAtomValue(apiAtom);
|
const api = useAtomValue(apiAtom);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@@ -58,9 +56,6 @@ export const ChromecastPlayer: React.FC<ChromecastPlayerProps> = ({
|
|||||||
showControls,
|
showControls,
|
||||||
currentItem,
|
currentItem,
|
||||||
nextItem,
|
nextItem,
|
||||||
castDevice,
|
|
||||||
play,
|
|
||||||
pause,
|
|
||||||
stop,
|
stop,
|
||||||
togglePlay,
|
togglePlay,
|
||||||
seek,
|
seek,
|
||||||
@@ -75,11 +70,12 @@ export const ChromecastPlayer: React.FC<ChromecastPlayerProps> = ({
|
|||||||
settings,
|
settings,
|
||||||
} = useChromecastPlayer();
|
} = useChromecastPlayer();
|
||||||
|
|
||||||
const { segments, currentSegment, skipSegment, hasIntro, hasCredits } =
|
const { currentSegment, skipSegment } = useChromecastSegments(
|
||||||
useChromecastSegments(currentItem, playerState.progress);
|
currentItem,
|
||||||
|
playerState.progress,
|
||||||
|
);
|
||||||
|
|
||||||
const { trickPlayUrl, calculateTrickplayUrl, trickplayInfo } =
|
const { calculateTrickplayUrl, trickplayInfo } = useTrickplay(currentItem!);
|
||||||
useTrickplay(currentItem);
|
|
||||||
|
|
||||||
const [_showMenu, setShowMenu] = useState(false);
|
const [_showMenu, setShowMenu] = useState(false);
|
||||||
const [_showDeviceSheet, setShowDeviceSheet] = useState(false);
|
const [_showDeviceSheet, setShowDeviceSheet] = useState(false);
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ export const useChromecastPlayer = () => {
|
|||||||
setPlayerState((prev) => ({
|
setPlayerState((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
isConnected: !!castDevice,
|
isConnected: !!castDevice,
|
||||||
deviceName: castDevice?.deviceName || null,
|
deviceName: castDevice?.friendlyName || castDevice?.deviceId || null,
|
||||||
isPlaying: mediaStatus.playerState === "playing",
|
isPlaying: mediaStatus.playerState === "playing",
|
||||||
isPaused: mediaStatus.playerState === "paused",
|
isPaused: mediaStatus.playerState === "paused",
|
||||||
isStopped: mediaStatus.playerState === "idle",
|
isStopped: mediaStatus.playerState === "idle",
|
||||||
@@ -179,7 +179,7 @@ export const useChromecastPlayer = () => {
|
|||||||
}, [playerState.progress, seek, settings?.rewindSkipTime]);
|
}, [playerState.progress, seek, settings?.rewindSkipTime]);
|
||||||
|
|
||||||
const disconnect = useCallback(async () => {
|
const disconnect = useCallback(async () => {
|
||||||
await client?.endSession(true);
|
await client?.stop();
|
||||||
setPlayerState(DEFAULT_CHROMECAST_STATE);
|
setPlayerState(DEFAULT_CHROMECAST_STATE);
|
||||||
}, [client]);
|
}, [client]);
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ export const useChromecastPlayer = () => {
|
|||||||
const remainingTime = formatTime(playerState.duration - playerState.progress);
|
const remainingTime = formatTime(playerState.duration - playerState.progress);
|
||||||
const endingTime = calculateEndingTime(
|
const endingTime = calculateEndingTime(
|
||||||
playerState.duration - playerState.progress,
|
playerState.duration - playerState.progress,
|
||||||
settings?.use24HourFormat ?? true,
|
true, // TODO: Add use24HourFormat setting
|
||||||
);
|
);
|
||||||
|
|
||||||
// Next episode countdown
|
// Next episode countdown
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ export const useChromecastSegments = (
|
|||||||
|
|
||||||
const skipSegment = useCallback(
|
const skipSegment = useCallback(
|
||||||
(seekFn: (positionMs: number) => Promise<void>) => {
|
(seekFn: (positionMs: number) => Promise<void>) => {
|
||||||
if (currentSegment) {
|
if (currentSegment?.segment) {
|
||||||
return seekFn(currentSegment.segment.end * 1000);
|
return seekFn(currentSegment.segment.end * 1000);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -140,9 +140,11 @@ export const useChromecastSegments = (
|
|||||||
|
|
||||||
switch (currentSegment.type) {
|
switch (currentSegment.type) {
|
||||||
case "intro":
|
case "intro":
|
||||||
return settings?.autoSkipIntro ?? false;
|
// TODO: Add autoSkipIntroEnabled setting
|
||||||
|
return false;
|
||||||
case "credits":
|
case "credits":
|
||||||
return settings?.autoSkipCredits ?? false;
|
// TODO: Add autoSkipCreditsEnabled setting
|
||||||
|
return false;
|
||||||
case "recap":
|
case "recap":
|
||||||
case "commercial":
|
case "commercial":
|
||||||
case "preview":
|
case "preview":
|
||||||
@@ -151,7 +153,7 @@ export const useChromecastSegments = (
|
|||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}, [currentSegment, settings]);
|
}, [currentSegment]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
segments,
|
segments,
|
||||||
|
|||||||
@@ -112,10 +112,10 @@ export const formatEpisodeInfo = (
|
|||||||
*/
|
*/
|
||||||
export const getPosterUrl = (
|
export const getPosterUrl = (
|
||||||
item: {
|
item: {
|
||||||
Type?: string;
|
Type?: string | null;
|
||||||
ParentBackdropImageTags?: string[];
|
ParentBackdropImageTags?: string[] | null;
|
||||||
SeriesId?: string;
|
SeriesId?: string | null;
|
||||||
Id?: string;
|
Id?: string | null;
|
||||||
},
|
},
|
||||||
api: { basePath?: string },
|
api: { basePath?: string },
|
||||||
): string | null => {
|
): string | null => {
|
||||||
|
|||||||
Reference in New Issue
Block a user