fix: resolve 13 review issues across casting components

- casting-player: remove redundant self-navigation useEffect
- casting-player: derive Type from metadata instead of hardcoding 'Movie'
- casting-player: pass null to useTrickplay instead of empty BaseItemDto
- casting-player: use != null for skip time labels (allow 0 to render)
- Chromecast: case-insensitive m3u8 detection via regex
- Chromecast: fix UUID hyphen indices to 4,6,8,10 for proper v4 format
- CastingMiniPlayer: use SeriesPrimaryImageTag for series poster URL
- ChromecastConnectionMenu: send rounded volume to castSession.setVolume
- ChromecastConnectionMenu: use isMutedRef in onValueChange to avoid stale closure
- ChromecastDeviceSheet: skip volume sync during active sliding
- ChromecastDeviceSheet: move unmute logic from onValueChange to onSlidingStart
- useCasting: detect playback start via isPlaying/playerState, not just progress>0
- useCasting: derive isChromecastAvailable from castState instead of hardcoding true
- useTrickplay: accept BaseItemDto|null with null guards on Id access
This commit is contained in:
Uruk
2026-02-09 22:31:07 +01:00
committed by Gauvain
parent a841619d78
commit fcd7e46599
7 changed files with 55 additions and 34 deletions

View File

@@ -121,7 +121,7 @@ export function Chromecast({
randomBytes[8] = (randomBytes[8] & 0x3f) | 0x80; // Variant 10
const uuid = Array.from(randomBytes, (b, i) => {
const hex = b.toString(16).padStart(2, "0");
return [3, 5, 7, 9].includes(i) ? `-${hex}` : hex;
return [4, 6, 8, 10].includes(i) ? `-${hex}` : hex;
}).join("");
playSessionIdRef.current = uuid;
lastContentIdRef.current = contentId;
@@ -130,7 +130,7 @@ export function Chromecast({
const positionTicks = Math.floor(streamPosition * 10000000);
const isPaused = mediaStatus.playerState === "paused";
const streamUrl = mediaStatus.mediaInfo.contentUrl || "";
const isTranscoding = streamUrl.includes("m3u8");
const isTranscoding = /m3u8/i.test(streamUrl);
const progressInfo: PlaybackProgressInfo = {
ItemId: contentId,