feat(live-tv): browse channel guide and play catch-up from the player - #88
Merged
Conversation
8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds catch-up support to the in-player live-TV experience. The channel switcher (left press on the Siri remote during playback) now has a third Liquid Glass column — the Guide of the focused channel. Channels that advertise an archive are flagged, and from their guide the viewer can pick an already-aired programme to replay via catch-up, addressing the issue's ask to "go back and watch programs that already aired."
Implementation
TVChannelBrowserOverlay: it follows channel focus (debounced like the category/channel columns), shows the channel's programmes oldest-first, marks the live programme, and renders a catch-up affordance on past entries. Categories / Channels / Guide are each their ownfocusSection, so the remote hops between them.tvArchive > 0get aclock.arrow.circlepathbadge so the viewer knows a replay archive is available before stepping into the guide.PlayableMedia.catchup(...)—kind: .vod(seekable archive, no live banner, channel surfing disabled) with the channel's.livecontent ref (so no watch-progress is written, matching existing live behaviour).TVPlayerContent.guideListings(channelId:archiveDays:), which reaches back over the archive window for catch-up channels (the existingepgListingsonly returnedend > now). The index-servedchannelId + endquery keeps it to a small slice of the guide.XtreamClient.buildCatchupURLwas previously unused and built a non-standard path (unix timestamp + seconds). Rewrote it to the standard Xtream timeshift format…/timeshift/user/pass/{durationMinutes}/{Y-m-d:H-i}/{streamId}.{ext}.Testing
PlayableMediaTests,XtreamClientURLTests— iOS 17 Pro sim, TEST SUCCEEDED)Apple TV 4K, tvOS 26.5— BUILD SUCCEEDED)PlayableMedia.catchup(archive / non-archive / m3u cases). The guide column and focus flow are tvOS-only UI (tests run on iOS sim), so they were verified by build only.Platforms
Related
Closes #25