Commit Graph

31 Commits

Author SHA1 Message Date
4d662369c9 fix: clear persistent Laya warning and apply language selection immediately (#12)
Two fixes: the ChannelList local-AI warning kept showing after the
runtime became available because status changes were not re-evaluated
on refresh; and selecting a language in the player did not switch the
stream variant immediately. Refresh warning visibility from the
latest laya status and apply the chosen variant/language on
selection, with tests for both behaviors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 15:15:06 +02:00
4f65588893 fix: correct Settings actions in Laya ready state and clear stale AI warning (#12)
Offer the right actions in Settings when Laya is ready/available
instead of leaving irrelevant ones, and stop showing the ChannelList
local-AI warning once the runtime is actually available. Derive both
from layaStatusPresentation and cover the ready/available action set
with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 14:34:30 +02:00
d253642dec fix: make Laya status consistent between Settings and ChannelList (#12)
The model was reported as ready while the AI runtime was actually
unreachable, and the Download action stayed visible afterwards.
Distinguish model-downloaded from runtime-available in
layaStatusPresentation, derive the Download action from the real
combined state, and align Settings and ChannelList rendering on that
single source of truth. Cover the combined status cases with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 13:31:35 +02:00
ce11ecc757 feat: add optional Laya engine mode for grouping and language detection (#12)
Add a languageDetectionMode setting (algo | laya | laya+algo) exposed
in Settings with three engine choices. When Laya is enabled, a laya
service (Dockerfile.laya, optional compose profile, models stored
outside the repo under ./data/models/laya) can be started, with model
download and deletion from the UI via /laya routes to manage disk
space. Add a channelLanguageFusion service combining Laya results
with the existing algorithm, and wire detection mode through
grouping, channel list and player. Cover engine selection, fusion
and laya service behavior with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 11:13:34 +02:00
e06f4ec2c3 feat: add settings option to hide Live TV categories (#11)
Add a liveChannelListMode setting (default 'grouped') with a Settings
toggle to display the Live TV channel list flat, without category
group sections. When enabled, logical channels are listed directly
with their stream variants still grouped as in #9/#10. Cover the
setting default and flat-list behavior with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 09:57:20 +02:00
b95a408071 feat: detect variant language with confidence scoring and player language selector (#10)
Add a channelLanguageDetection service that scores language evidence
per IPTV variant (country/language prefixes in name and group, source
metadata, original title words) and picks the highest-scored language.
Integrate detected languages into channel variant grouping and add a
language selector to the live player to switch to a variant of the
logical channel in the desired language, keeping raw streams
non-destructive.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 09:33:28 +02:00
a7a83a6faa feat: group variants of the same IPTV channel into a logical channel (#9)
Add a channelVariantGrouping service that normalizes channel names
(strips region prefixes and quality tokens) to fingerprint duplicate
stream entries and cluster them under a single logical channel with
quality/source variants. Wire it into the Live TV channel list and
player variant selection, reducing duplicates without destructively
merging streams.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 08:25:42 +02:00
7006513aaf fix: remove deduplication logic from channel list 2026-01-31 10:59:28 -08:00
d6eda66360 fix: favorites arrow navigation stays in same group, add cross-player stop on new playback 2026-01-18 00:58:57 -08:00
04fcabda84 refactor: use Xtream API endpoints for M3U channel loading 2026-01-12 00:02:16 -08:00
5f24d7e264 perf: collapse groups by default and defer channel rendering in channel list 2026-01-11 16:08:20 -08:00
d96bb7c776 fix: replace spread operators with concat to handle massive M3U playlists 2026-01-11 12:48:03 -08:00
8805ddbc13 Refactored code to use sqlite for channel, epg and vod data 2026-01-03 21:07:18 -08:00
d5ebd270dc Added EPG refresh timer updateVisibleEpgInfo method to ChannelList 2026-01-01 14:20:45 -08:00
d1bfd1b9e7 Added server-side saving for settings 2025-12-31 15:35:37 -08:00
3fffdddf4b Added proxy route for channel icons and other images, updated readme 2025-12-29 23:04:31 -08:00
e4ae0e9b69 prevent null channel names from breaking search filter 2025-12-29 16:26:03 +01:00
9ef9c847fc Updated expand and collapse icons 2025-12-28 22:25:26 -08:00
29a7996ecd Implemented SVG icons 2025-12-28 21:27:21 -08:00
44365c4dad Implemented focus for active channel in channel list 2025-12-28 20:15:26 -08:00
e8bfb56c8b Implemented unique renderId for channel navigation 2025-12-28 19:50:12 -08:00
b504faf909 Implemented cache clearing in channel list 2025-12-28 19:35:10 -08:00
3b460591e0 Updated channel list context menu 2025-12-28 19:01:10 -08:00
15098ad6ed Fixed hidden groups consuming batch slots 2025-12-28 17:52:40 -08:00
2ebe52685f Changed content manager group behavior and added save button 2025-12-28 16:36:58 -08:00
dc15e1f396 Fixed channel ID format mismatch 2025-12-28 16:14:28 -08:00
4e398bbe38 Reduce batch size for channel list, memoize EPG, virtualized source manager 2025-12-28 15:43:45 -08:00
1f81323f16 Fixed placeholder.png fetch error 2025-12-28 04:01:43 -08:00
d251488f5f Added optional chaining (?.) and nullish coalescing (??) to handle cases 2025-12-28 03:33:12 -08:00
762131f939 Fixed issue with favorites list not snycing in some circumstances 2025-12-27 21:49:22 -08:00
4f9ec55874 Initial commit 2025-12-27 14:16:40 -08:00