feat(epg): copy catch-up programme URLs without changing playback

This commit is contained in:
4gray committed 2026-09-07 21:02:13 +02:00
1 parent 97b0264dee
commit dcaeb26849
50 files changed
+850 -157

No files matched your search

+17
View File
@@ -1123,6 +1123,23 @@ class EpgService {
for a programme the user clicked, both hosts surface a
`EPG.TIMELINE.CATCHUP_FAILED` snackbar instead of doing nothing.
### Copy archive URL
Programme details opened from the EPG timeline or list offer **Copy archive
URL** when catch-up is available. Xtream Live TV, M3U playback and their
Favorites/Recent live tabs resolve the same URL as archive playback without
selecting a programme or changing the player. Stalker and unsupported/expired
archive entries expose no copy action. The full M3U guide currently has no
catch-up capability and therefore does not expose this action.
The URL can contain account credentials; the dialog explains that external
players may also need the source's HTTP headers. Copy is explicit, errors use
localized feedback without raw URLs, and repeated clicks share one pending
copy operation. Timeline/list dialogs capture the host's source/channel
`archiveContextKey`, refuse actions after it changes, and unsubscribe when
the view is destroyed. A copied M3U start-over URL need not stop at the programme's
end. Copying a URL does not download or preserve an expiring archive.
### Programme guide
`app-epg-guide` (`libs/ui/epg/src/lib/epg-guide/`) is a host-agnostic
@@ -257,6 +257,11 @@ tab can gate the timeline's archive window. `tv_archive_duration` is
interpreted as **days** everywhere, matching
`live-stream-layout.controlledArchiveDays` (issue #1138).
Programme details in the Live TV and Favorites/Recent EPG timeline/list also
offer **Copy archive URL**. This uses the same resolver and persisted server
timezone without changing playback. See the M3U module's "Copy archive URL"
contract for clipboard feedback and credential/header handling.
### Start time is the panel's clock, not the viewer's
The `{start}` segment (`Y-m-d:H-M`) is read by the panel with `strtotime()`