From 6e63afc61a1a93e6824c30b7f04abb63d30285cb Mon Sep 17 00:00:00 2001 From: Uruk Date: Thu, 21 May 2026 02:32:18 +0200 Subject: [PATCH] feat(casting): replace H265 toggle with Chromecast profile selector --- components/settings/ChromecastSettings.tsx | 56 +++++++++++++++++++--- utils/atoms/settings.ts | 2 - 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/components/settings/ChromecastSettings.tsx b/components/settings/ChromecastSettings.tsx index 4da06332f..ca8d205e9 100644 --- a/components/settings/ChromecastSettings.tsx +++ b/components/settings/ChromecastSettings.tsx @@ -1,18 +1,62 @@ -import { Switch, View } from "react-native"; +import { Ionicons } from "@expo/vector-icons"; +import { useMemo } from "react"; +import { View } from "react-native"; import { useSettings } from "@/utils/atoms/settings"; +import type { ChromecastProfileMode } from "@/utils/casting/capabilities"; +import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; +import { PlatformDropdown } from "../PlatformDropdown"; + +const PROFILE_LABELS: Record = { + auto: "Automatic (recommended)", + "force-hevc": "Force HEVC / H265", + "force-h264": "Force H264", +}; export const ChromecastSettings: React.FC = ({ ...props }) => { const { settings, updateSettings } = useSettings(); + + const profileOptions = useMemo( + () => [ + { + options: ( + ["auto", "force-hevc", "force-h264"] as ChromecastProfileMode[] + ).map((mode) => ({ + type: "radio" as const, + label: PROFILE_LABELS[mode], + value: mode, + selected: (settings.chromecastProfile ?? "auto") === mode, + onPress: () => updateSettings({ chromecastProfile: mode }), + })), + }, + ], + [settings.chromecastProfile, updateSettings], + ); + return ( - - - updateSettings({ enableH265ForChromecast }) + + + + {PROFILE_LABELS[settings.chromecastProfile ?? "auto"]} + + + } /> diff --git a/utils/atoms/settings.ts b/utils/atoms/settings.ts index 9a3e9477e..29fa3397c 100644 --- a/utils/atoms/settings.ts +++ b/utils/atoms/settings.ts @@ -181,7 +181,6 @@ export type Settings = { jellyseerrServerUrl?: string; useKefinTweaks: boolean; hiddenLibraries?: string[]; - enableH265ForChromecast: boolean; /** Chromecast profile selection mode. "auto" detects per device. */ chromecastProfile: ChromecastProfileMode; /** Optional manual Chromecast video bitrate cap, in bits per second. */ @@ -276,7 +275,6 @@ export const defaultValues: Settings = { jellyseerrServerUrl: undefined, useKefinTweaks: false, hiddenLibraries: [], - enableH265ForChromecast: false, chromecastProfile: "auto", chromecastMaxBitrate: undefined, maxAutoPlayEpisodeCount: { key: "3", value: 3 },