feat(xtream): catch-up badge for live channels with archive - #1341
Conversation
Live channels whose provider declares playable catch-up (tv_archive=1 with a positive tv_archive_duration) now show a small history badge in the channel sidebar next to the name and on the all-channels grid cards, with the archive window (days) in the tooltip. Closes #1128 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Greptile SummaryThe PR surfaces provider-declared Xtream catch-up availability across live-channel sidebars, grids, favorites, and recent collections while adding stable programme-info actions to Xtream and Stalker sidebars.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Xtream live-channel metadata] --> B[Catch-up normalization helpers]
B --> C[Portal channel sidebar]
A --> D[Unified collection mapping]
D --> E[Favorites and recent rows]
A --> F[Live grid cards]
C --> G[Accessible history badge and day tooltip]
E --> G
F --> G
Reviews (2): Last reviewed commit: "fix(ui): constrain Material touch target..." | Re-trigger Greptile |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1b18adf503
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The mat-icon is aria-hidden and the tooltip is pointer-only, so the badge status was invisible to keyboard and screen-reader users. Both badge surfaces now also render the translated status as visually-hidden text (Codex review, P2). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. Bravo. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Thx for the quick implementation @4gray Couple of comments thou:
Currently (i) appears beside the (*) icon, but it seems the item strip has enough vertical space to stack both symbols on the right, and save some horizontal space. Anyways, thanks again for all the improvements! |
Carries tvArchive/tvArchiveDuration through UnifiedFavoriteChannel so the shared favorites list (portal favorites/recent tabs and global favorites) renders the same catch-up badge as the live sidebar. Requested in PR feedback by the issue author. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Thanks @4gray for the newer patch. Now the (c) symbol shows both in the Live Tab listings and Favorites accurately (in the sample of channels I compared at both tabs) Success, thanks! What I don't know if it's intended, is that the (i) icon (addit pgm info via popup) only shows in the Favorites tab Thx again |
…vertically Adds the (i) programme-info button to the Xtream and Stalker live sidebars and reworks the row action column: buttons stack vertically (favorite on top, info below), so the second button costs no horizontal space — the column is actually narrower than the previous single-button row. The info slot is reserved (inert, visibility:hidden) while the row has no programme, so the star never shifts when EPG data arrives. Requested by the issue author in PR feedback. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@WolfganP Thanks again for testing! 🙏 Both of your points were improved:
|
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c8376c187e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| button { | ||
| width: 32px; | ||
| height: 32px; | ||
| width: 28px; | ||
| height: 28px; |
There was a problem hiding this comment.
Prevent Material touch targets from overlapping stacked actions
When both favorite and programme-info actions are visible, these 28px buttons are stacked with no gap, but Angular Material's mat-icon-button retains a 48px .mat-mdc-button-touch-target. The targets therefore overlap by 20px, and because the info button is the later sibling, clicks or taps on the lower portion of the favorite button can open programme details instead of toggling the favorite. Constrain the Material touch-target size to the button bounds or provide non-overlapping spacing.
Useful? React with 👍 / 👎.
…file CI lints the merge with master, where unified-live-tab.component.spec.ts grew (#1374) to one line under the 1200 max-lines test budget — the archive passthrough test added here tipped the merged result over. The test moves to a focused template-less spec (plus a null-normalisation case), leaving the main spec at master's size. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mat-icon-button keeps a 48px touch target; stacked 28px buttons overlapped by 20px and the later sibling (programme info) stole clicks from the lower third of the favorite star. Verified via document.elementFromPoint before/after: the star's visual bounds now hit the star, and clicks left of the column reach the row again instead of the button's oversized target (Codex review). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. 🚀 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@codex review |
|
@greptileai review |
|
Codex Review: Didn't find any major issues. Breezy! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@4gray tested on master and works as expected. Thx a lot! |

Closes #1128
Live channels with provider catch-up (
tv_archive === 1with a positivetv_archive_duration) now show a smallhistorybadge:Follow-ups from @WolfganP's testing feedback (thanks!):
Implementation
isXtreamCatchupAvailable/getXtreamCatchupDaysin@iptvnator/portal/shared/utilmirror the existing playback-side gates: flag and positive window required. String field values from lenient panels are handled.ChannelListItemComponentgains optionalcatchupAvailable/catchupDaysinputs (default off) and the reworked action column;UnifiedFavoriteChannelcarriestvArchive/tvArchiveDurationthrough to the shared favorites list.CHANNELS.CATCHUP_AVAILABLE/CHANNELS.CATCHUP_AVAILABLE_DAYSadded to all 19 locales; the (i) button reuses the existing tooltip key.Tests
channel-list-item.component.spec.ts; three grid cases ingrid-list.component.spec.ts; favorites badge + archive passthrough inglobal-favorites-list/unified-live-tabspecs.xtream-epg.e2e.ts, green locally in both timezone variants..changes/xtream-catchup-indicator.md+.changes/ui-live-row-vertical-actions.md.The badge reflects the provider's declaration only — no probing of whether the archive actually plays.
🤖 Generated with Claude Code