Run full live catalog refreshes through live source sync, complete channel analysis, EPG source refresh, and persisted EPG rematching while keeping check-new incremental.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Separate incremental live checks from full catalog rebuilds and page projected channel/variant loading so first live-list display stays bounded.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ensure automatic live projection rebuilds use the algorithmic path so Laya identity batches are not launched during live list playback or background sync.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bound synchronous live channel enrichment and tolerate minimal projection payloads so analysis and listings do not blank the UI.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Filter projected live channels locally in the browser and apply server-side search and language filters before costly enrichment work.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Track the Laya identity phase separately from catalog projection progress and expose phase-specific counters through the live status API and Settings presentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
beIN Sports 1 variants stayed separated after projection because
names with region prefixes (C Car, C Reu, Thai), time-shift suffixes
(2h/4h/8h/12h) and language markers (En, Fr, Thai) produced distinct
fingerprints. Extend normalization in the server projection service
and the frontend grouping fallback to fold these into one logical
channel, with tests on the exact reported names. Clarify the Laya
language detection warning so a language-matching failure is not
mistaken for a grouping failure, and bump script versions for cache
refresh.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a Settings action to manually rerun Live TV stream analysis:
it triggers an admin-guarded projection rebuild endpoint that
groups streams into logical channels (covering channels present
before the projection existed) and reruns language/Laya detection,
with progress presented via liveAnalysisPresentation. Harden the
Laya batch path that failed with 'Local AI language matching
failed' by surfacing the underlying cause and falling back to
standard matching cleanly. Guard admin-only rebuild through a new
authz helper and cover routes, service and presentation with tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move variant grouping work out of Live TV rendering into the
catalog pipeline: a liveProjectionService builds the logical channel
projection (schema in liveProjectionSchema) whenever a source is
added, synced or modified (name change, new address), and the
projection is served through a /live route. ChannelList now consumes
the precomputed projection via a liveChannelProjection client
service, recalculating only when the catalog changes. Cover
projection building, incremental recompute and client consumption
with tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>