- Track list items by start+stop to avoid incorrect reuse of DOM
nodes when program time ranges change.
- matListItemLine with matListItemTitle and add
program-title class to ensure proper styling and layout of titles.
- Add left margin to item label for visual spacing.
- Update imports to use shared-interfaces barrel to simplify paths.
- Remove unused OnDestroy and related ipc cleanup; epg list no longer
manages EPG IPC listeners directly.
- Introduce setEpgAvailableFlag dispatch when handling EPG data to
expose availability state; clear current EPG program via
resetActiveEpgProgram when no programs are returned.
- Remove direct Store usage from EpgService and update BehaviorSubject
flow to set epgAvailable=false on error.
- Clean up unused imports and minor formatting.
These changes fix rendering glitches, improve state clarity for EPG
availability, simplify imports, and tidy up lifecycle responsibilities.
Convert channel structures to a consistent and adapt templates
to read new safely.
- Add accessors in EListComponent:
- getChannelName(channel) returns first displayName or ''
- getChannelIcon(channel) returns first icon.src or ''
These helpers make reading channel metadata robust against missing or
differently-shaped data.
- Build channel object with normalized fields in ngOnInit:
- set id, displayName[], url[], icon[] rather than raw name/icon
- ensure fallbacks to empty strings/arrays to avoid undefined values
- Update InfoOverlay template to safely access program fields:
- use epgProgram?.icon?.[0]?.src for image source
- use epgProgram?.title?.[0]?.value and epgProgram?.desc?.[0]?.value
- Fix MultiEpg templates for property access and tracking:
- replace invalid template boolean expressions with safe non-null
assertion where needed ((hourWidth$ | async)! ...)
- use track item.id instead of track $any(item).channel
- call getChannelIcon/getChannelName and render icon/name via helpers
These changes prevent runtime errors when fields are missing or have
array-wrapped values, improve template safety, and standardize channel
data handling across the EPG UI.
a dedicated refresh button and workflow for Xtream in the
recent playlists UI. Show a refresh icon only when the playlist has a
serverUrl. For Xtream playlists, prompt the user with a confirmation
dialog, delete locally cached categories and streams, show a toast that
the refresh started, and navigate to the playlist to trigger re-import.
Keep existing refresh IPC logic for non-Xtream (M3U/local) playlists.
Also add English translations for the Xtream refresh tooltip and dialog
messages, and surface errors via snackbar on failure.
This enables safe re-importing of remote Xtream playlists while preserving
favorites and recent items.