Add specs for with-stalker-favorites and with-stalker-recent: payload
normalization and id/title fallbacks, series-mode category forcing, meta
sync dispatches, snackbar/callback side effects, and error paths.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add specs for electron-xtream-data-source (DB-hit vs cold-cache paths,
concurrent request dedup, error propagation, full method delegation) and
extend the favorites feature spec with the invalid-input and
content-not-found guard paths.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the vertical EPG list with a shared horizontal `app-epg-timeline`
ribbon across all live surfaces (M3U player, unified live tab, Xtream, Stalker):
zoom, day navigation, short-programme grouping, catch-up/timeshift, and
per-state empty views. Backend gains timezone-aware `datetime()` comparisons,
unscoped source fallback, non-ASCII candidate matching, and chunked candidate
queries.
Timeline split into reusable, view-agnostic modules (archive/summary/dialog
service/render util/scroll controller) for the future EPG list view.
Fixes landed during review:
- honor the controlled `selectedDate` input (seed via linkedSignal)
- restore ribbon position across collapse/expand
- keep the ribbon mounted when scrolling across a gap day
- don't trigger block playback on Enter from nested watch/info buttons
- don't reset timeshift playback on the 30s now-tick during EPG gaps
Greptile 5/5 (safe to merge); Codex clean; CI green.
Fix Stalker route initialization so full portal sessions load auth-capable playlist data before category/content requests. Add regression coverage for full playlist lookup, empty lookup fallback, fast-path explicit portal metadata, and authenticated request routing.
Adds IMDb rating sort and minimum-rating filtering for Xtream VOD/series catalogs, consolidates refinement controls, and guards rating controls away from Live TV.
- save Xtream playlist details through browser-safe metadata persistence in PWA\n- keep PWA Xtream data source cache in sync with current playlist metadata\n- cover dialog close timing, stale cache, and PWA data-source bootstrap regression
* fix(xtream): open correct channel and category from Ctrl+F live search
Three bugs prevented a live channel clicked from global search (Ctrl+F)
from playing and highlighting correctly in the sidebar:
1. Component reuse on same-route navigation: when the user was already
on the /live route, Angular reused LiveStreamLayoutComponent without
re-running the constructor, so openXtreamLiveItemId was never read
from history state. Fixed by subscribing to NavigationEnd and calling
checkPendingAutoOpenFromState() on every navigation.
2. Early effect firing with wrong content type: the auto-open effect
could fire before syncRouteState set selectedContentType to 'live',
causing the channel to be searched in VOD streams, not found, and
the pending ID cleared. Fixed by guarding on selectedContentType()
=== 'live' before processing.
3. Category filter blocking channel lookup: getVisibleChannels() only
returned channels in the currently selected category, so a channel
from a different category was never found. Fixed by switching to
getAllLiveStreams() (raw liveStreams signal) for the auto-open lookup.
Also sets selectedCategoryId to the opened channel's category so the
sidebar scrolls to the right category and highlights the channel.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(xtream): address PR review feedback on live search auto-open
- Remove redundant constructor call: rely solely on NavigationEnd
subscription to read openXtreamLiveItemId from history state, which
fires after component creation for both initial and re-navigation
- Add explicit setSelectedItem call after auto-open so EPG loading and
remote-control status reflect the playing channel independently of
the constructStreamUrl side-effect
- Add 6 regression tests covering: initial NavigationEnd, category
highlighting, content-type guard, lazy liveStreams loading, missing
channel, and component-reuse re-navigation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- merge origin/master into PR #964 and keep embedded MPV test on the isolated playback sub-entrypoint
- centralize EPG capability through DataService.supportsEpg and update PWA web-e2e expectations
- split BrowserAccessError copy between Electron and PWA diagnostics