Skip to content

Compose for TV Phase 6: Series/Anime episode + season selection - #3189

Open
sika200581 wants to merge 6 commits into
recloudstream:masterfrom
sika200581:compose-tv-phase-6
Open

sika200581 wants to merge 6 commits into
recloudstream:masterfrom
sika200581:compose-tv-phase-6

Conversation

@sika200581

Copy link
Copy Markdown

Summary

  • Inspects real LoadResponse episode models (Episode, SeasonData, TvSeriesLoadResponse, AnimeLoadResponse / DubStatus) and maps them to immutable TvSeason / TvEpisode (no invented domain fields)
  • Adds D-pad / 10ft season + episode selector (TvEpisodeSelector) with selection in TvDetailsUiState via ViewModel events (no FocusRequester/Activity in state)
  • Default episode is deterministic (first playable of first regular season; Sub→Dub→None for anime) — no resume / DataStore writes
  • Play Episode → extended TvPlaybackRequestTvPlaybackBridge episode ResultEpisode path → same RepoLinkGenerator / GeneratorPlayer / CS3IPlayer as Phase 5 movies
  • Movies still Watch Now; Live/Torrent stay explicitly unsupported; mock never plays
  • No changes outside app/.../tv/** (+ docs); library / plugins / extractors / players untouched

Test plan

  • ./gradlew :app:compileStableDebugKotlin
  • ./gradlew :app:assembleStableDebug
  • Launch TvComposeProbeActivity; open a Series Details card → season chips + episode list → Play Episode → GeneratorPlayer
  • Open an Anime card with Sub/Dub → dub chips switch seasons/episodes correctly
  • Confirm default focuses first playable regular-season episode (specials/season 0 not preferred when Season 1+ exists)
  • Movies still Watch Now as Phase 5
  • Live/Torrent show unsupported reason; mock never plays
  • Back from player returns to Details with season/episode selection preserved
  • Confirm no androidx.compose.material3 under tv/

Introduce an isolated TvComposeProbeActivity with TvTheme and a small
focusable card/button screen using androidx.tv:tv-material:1.1.0 only.
Register the activity without launcher filters so phone and legacy TV
startup stay unchanged; document adb launch for debug builds.
Build a structural TV navigation shell with mock Home (hero + rails),
reusable focus scale/glow cards, and DEBUG-only settings entry — still
isolated from APIRepository, player, and legacy TV XML.
Wire APIRepository.getMainPage through TvHomeRepository into immutable
TV models and MVI StateContainer UI states, with explicit mock fallback
and Continue Watching kept demo-only (no history/DataStore writes).
Wire Home cards/hero Details through compact TvContentRef into
TvDetailsRepository (real load flow) and immutable Details UI; Watch Now
remains a stub with no player, and mock items never invent load IDs.
Wire Details Watch Now through an immutable TvPlaybackRequest and
TvPlaybackBridge into RepoLinkGenerator + GeneratorPlayer without
changing CS3IPlayer, extractors, or custom player UI. Movies only;
series/anime/live/torrent stay disabled for Phase 6.
Map real LoadResponse Episode/SeasonData into immutable TvSeason/TvEpisode,
add D-pad season+episode selector, and play via existing GeneratorPlayer path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant