Bring 323 commits of develop (incl. the Expo SDK 56 / TV-branch work) into
the chromecast refactor. Conflict resolutions:
- chapters: take develop's reviewed version (ChapterList/ChapterTicks/
chapters.ts/test) — adds chapterNameAt, markers API, themed Colors.
- auto-skip: keep chromecast's unified useSegmentSkipper for the phone
player; restore develop's useCreditSkipper/useIntroSkipper (deleted on
chromecast) so develop's Controls.tv.tsx compiles. TV->useSegmentSkipper
migration left as follow-up.
- en.json: union the two player blocks (kept chromecast casting keys +
develop's subtitle/playback keys).
- TechnicalInfoOverlay/PlatformDropdown: take develop's TV-safe versions
(kept chromecast's disabled-prop branch, aliased to avoid shadowing the
@expo/ui disabled modifier).
- SDK 56 fixes: expo-router Router -> ImperativeRouter in cast components;
ChapterTicks markers API in CastPlayerProgressBar.
- restore utils/profiles/chromecast* (deleted on chromecast, still used by
PlayButton).
Typecheck passes; bun.lock regenerated against merged package.json.
Added the ability to swap VO options for android only between "GPU" and
"GPU-next"
Removed some console logs from previous debugging
Added the ability to see what VO is being used to render in the video
player
Signed-off-by: Lance Chant <13349722+lancechant@users.noreply.github.com>
Fixes several issues and improves the casting player experience.
- Adds the ability to disable segment skipping options based on plugin settings.
- Improves Chromecast integration by:
- Adding PlaySessionId for better tracking.
- Improves audio track selection
- Uses mediaInfo builder for loading media.
- Adds support for loading next/previous episodes
- Translation support
- Updates progress reporting to Jellyfin to be more accurate and reliable.
- Fixes an error message in the direct player.
Refactors the Chromecast casting player for better compatibility, UI improvements, and stability.
- Adds auto-selection of stereo audio tracks for improved Chromecast compatibility
- Refactors episode list to filter out virtual episodes and allow season selection
- Improves UI layout and styling
- Removes connection quality indicator
- Fixes progress reporting to Jellyfin
- Updates volume control to use CastSession for device volume
Enriches the casting player screen by fetching item details from the Jellyfin API for a more reliable and complete user experience.
The casting player now prioritizes item data fetched directly from the API, providing richer metadata and ensuring accurate information display.
- Fetches full item data based on content ID.
- Uses fetched data as the primary source of item information, falling back to customData or minimal info if unavailable.
- Improves UI by showing connection quality and bitrate.
- Enhances episode list display and scrolling.
- Adds a stop casting button.
- Minor UI adjustments for better readability and aesthetics.
This change enhances the accuracy and reliability of displayed information, improving the overall user experience of the casting player.
- Implemented a retry mechanism for Chromecast device discovery with a maximum of 3 attempts.
- Added logging for discovered devices to aid in debugging.
- Updated Chromecast button interactions to streamline navigation to the casting player.
- Changed the color scheme for Chromecast components to a consistent purple theme.
- Modified the ChromecastDeviceSheet to sync volume slider with prop changes.
- Improved the ChromecastSettingsMenu to conditionally render audio and subtitle tracks based on availability.
- Updated translations for the casting player to include new strings for better user experience.
Relocates player-specific translation keys from the "player" namespace to the "common" namespace to improve reusability across different components.
All player-related strings (error messages, playback controls, download prompts) are now accessible as common translations, enabling their use throughout the application without namespace-specific imports.
- Add SegmentSkipMode type ('none', 'ask', 'auto') in settings.ts
- Create 5 segment skip settings: skipIntro, skipOutro, skipRecap, skipCommercial, skipPreview
- Update segments.ts to fetch all 5 segment types from Jellyfin MediaSegments API (10.11+)
- Create unified useSegmentSkipper hook supporting all segment types with 3 modes
- Update video player Controls.tsx with priority system (Commercial > Recap > Intro > Preview > Outro)
- Add dynamic skip button text in BottomControls.tsx
- Create dedicated settings submenu at settings/segment-skip/page.tsx
- Simplify PlaybackControlsSettings.tsx with navigation to submenu
- Extend DownloadedItem interface with all segment types for offline support
- Add 13+ translation keys for segment skip UI
Add a new "Settings" tab to the TV subtitle modal with controls for:
- Subtitle Scale (0.5x to 2.0x)
- Vertical Margin (-100 to +100)
- Horizontal Alignment (left, center, right)
- Vertical Alignment (top, center, bottom)
All settings use mpvSubtitle* settings for direct MPV control.
Includes English translations for all new settings.