4gray
4c2666520c
fix(pwa): parallelize dashboard xtream loads
2026-05-21 21:40:24 +03:00
4gray
69b7bca9df
fix(pwa): prefer xtream collection snapshots
2026-05-21 21:13:58 +03:00
4gray
87dfaec03d
fix(pwa): filter stalker from xtream collections
2026-05-21 20:33:02 +03:00
4gray
6438eec49f
fix(pwa): align xtream content identity
2026-05-21 20:18:39 +03:00
4gray
ed0b6833d6
fix(pwa): persist xtream collection snapshots
2026-05-21 20:00:38 +03:00
4gray
3ccbfe4f99
fix(pwa): remove dashboard xtream items via data source
2026-05-21 19:52:39 +03:00
4gray
9097ff5bc1
fix(pwa): align xtream recent clearing
2026-05-21 19:45:07 +03:00
4gray
d1e057887f
fix(pwa): avoid persisting xtream passwords
2026-05-21 19:41:16 +03:00
4gray
ec098f98b1
fix(pwa): hydrate xtream user collections
2026-05-21 19:35:36 +03:00
4gray
1ea6914f98
fix(pwa): harden xtream identity normalization
2026-05-21 19:27:40 +03:00
4gray
1d4d793aac
fix(pwa): restore xtream user collections
2026-05-21 19:23:25 +03:00
4gray
6829c667bd
fix(pwa): restore xtream rail and vod navigation
2026-05-21 14:18:11 +03:00
4gray
5b091809ef
fix(xtream): ignore future recently added dates
...
## Summary
- Normalize Xtream recently-added timestamps across UI, import, and dashboard query paths.
- Filter future/invalid provider dates before ranking rails and migrate legacy millisecond cache rows.
- Add regression coverage for future timestamps, series date priority, and DB migration behavior.
## Validation
- GitHub checks passed, including Unit Tests and Typechecks, Web E2E, Electron E2E on macOS/Ubuntu/Windows, CodeQL, builds, and Greptile Review.
2026-05-19 14:39:38 +02:00
4gray
20e7322353
refactor(portal): split collection data access ( #953 )
2026-05-19 00:01:34 +02:00
4gray
118d4fce32
fix(playback): improve inline stream diagnostics ( #952 )
...
* fix(playback): improve inline stream diagnostics
* fix(playback): preserve headers in diagnostics wrapper
* fix(portal): align unified live player imports
2026-05-18 23:59:20 +02:00
4gray
5e5a89a300
refactor(ui): remove dead portal code and share detail styles ( #946 )
2026-05-16 00:09:29 +02:00
4gray
0ec9b29993
fix(playlist): preserve auto-refresh on manual refresh ( #947 )
...
* fix(playlist): preserve auto-refresh on manual refresh
* test(playlist): cover disabled auto-refresh preservation
2026-05-15 23:10:35 +02:00
4gray
272e0e772e
fix(stalker): preserve explicit portal identity ( #941 )
2026-05-15 18:34:49 +02:00
4gray
2d5c4fa4f9
chore: tighten validation and runtime logging
...
* chore: tighten validation and runtime logging
* fix(i18n): localize new settings labels
2026-05-15 17:43:42 +02:00
4gray
d24c77a143
chore(nx): enforce scoped workspace boundaries ( #942 )
2026-05-15 09:59:06 +02:00
4gray
8f79b25f52
fix(playback): treat portal mpeg-ts vod as non-live
2026-05-15 01:07:23 +02:00
4gray
4a4334cb64
feat(playback): improve browser-player diagnostics ( #939 )
...
* feat(playback): diagnose browser stream access errors
Entire-Checkpoint: f957cd9849e0
* feat(playback): expose browser-player diagnostic details
Entire-Checkpoint: f957cd9849e0
* fix(playback): keep media path extensions authoritative
Entire-Checkpoint: f957cd9849e0
* fix(playback): tighten browser access diagnostics
Entire-Checkpoint: f957cd9849e0
* fix(playback): align diagnostic followups
Entire-Checkpoint: f957cd9849e0
* fix(playback): narrow declared stream metadata
Entire-Checkpoint: f957cd9849e0
* fix(playback): preserve explicit extension overrides
Entire-Checkpoint: f957cd9849e0
* fix(playback): keep mpeg-ts out of unsupported containers
Entire-Checkpoint: f957cd9849e0
* refactor(playback): split diagnostics utilities
Entire-Checkpoint: f957cd9849e0
* fix(playback): treat mpegts early eof as media fallback
Entire-Checkpoint: f957cd9849e0
2026-05-15 00:55:23 +02:00
4gray
8232a86a1e
feat(portal): add category sorting controls ( #940 )
...
* feat(portal): add category sort modes
* fix(portal): address category sort review feedback
2026-05-15 00:28:32 +02:00
4gray
2a5b1d1da7
fix(xtream): keep live playback on category switch ( #936 )
2026-05-14 20:52:02 +02:00
4gray
db08ec2958
fix(playback): keep diagnostics within player viewport
...
Entire-Checkpoint: f957cd9849e0
2026-05-14 20:49:40 +02:00
4gray
a40d5447e7
feat(settings): add external player arguments ( #932 )
...
* feat(settings): add external player arguments
* fix(settings): address external player argument review
* fix(settings): require external player argument settings
* feat(settings): add external player argument placeholders
Closes https://github.com/4gray/iptvnator/issues/835
2026-05-14 11:04:01 +02:00
Toni Oriol and 4gray
2f9aef1578
fix(playback): handle IPTV proxy URLs without file extensions ( #934 )
...
* fix(playback): handle IPTV proxy URLs without file extensions
IPTV proxy servers (Acexy, Xtream Codes, etc.) use query-string URLs
like `https://proxy.example.com/ace/getstream?infohash=abc ` that return
raw MPEG-TS streams without a file extension in the path.
`getExtensionFromUrl()` was returning garbage for these URLs (e.g.
`com/ace/getstream` from splitting on dots across path segments). All
four player backends then misrouted the stream — typically to HLS.js
which failed because the response is raw MPEG-TS, not an HLS manifest.
Root fix: rewrite `getExtensionFromUrl()` to extract the extension from
the last path segment only, returning `undefined` when there is no
dot-separated extension.
Player adjustments: treat `undefined` extension as MPEG-TS (the most
common format for live IPTV proxy streams) across all four backends
(HTML5, ArtPlayer, VideoJs, web-player-view).
* test(m3u-utils): cover URL extension parsing
* fix(playback): preserve query-declared stream extensions
---------
Co-authored-by: 4gray <serega05@gmail.com >
2026-05-14 00:13:08 +02:00
4gray
9ae984ad7f
feat(portal): add series quick start CTA ( #925 )
...
* feat(portal): add series quick start CTA
Entire-Checkpoint: f957cd9849e0
* fix(portal): address series quick start review
Entire-Checkpoint: f957cd9849e0
* docs: use repo-relative quick start path
Entire-Checkpoint: f957cd9849e0
2026-05-12 23:45:02 +02:00
4gray
a33d506266
fix(stalker): play radio collections with audio layout ( #930 )
...
* fix(stalker): play radio collections with audio layout
* fix(stalker): address radio review feedback
2026-05-12 19:48:38 +02:00
4gray
6ae1251ad1
fix(playback): use inline player for collection VOD ( #928 )
...
* feat(portal): add series quick start CTA
Entire-Checkpoint: f957cd9849e0
* fix(playback): use inline player for collection vod
* fix(playback): address inline collection review feedback
* fix(playback): ignore stale vod position loads
2026-05-12 19:26:40 +02:00
4gray
f922dd2d00
style: adjust size and remove unnecessary styles for action buttons
...
Entire-Checkpoint: f957cd9849e0
2026-05-10 23:37:15 +02:00
4gray
1ca291d35c
chore(nx): update Nx to 22.7.1 ( #923 )
...
* chore(nx): update Nx to 22.7.1
Entire-Checkpoint: f957cd9849e0
* fix(ci): patch nx-electron package metadata copy
Entire-Checkpoint: f957cd9849e0
* fix(packaging): preserve electron package metadata
Entire-Checkpoint: f957cd9849e0
* fix(packaging): address package verifier review
Entire-Checkpoint: f957cd9849e0
2026-05-10 22:01:25 +02:00
4gray
6305dcf00e
Add browser playback diagnostics and MPV/VLC fallback ( #921 )
...
* feat(playback): add codec diagnostics fallback
Entire-Checkpoint: f957cd9849e0
* fix(playback): address diagnostics review feedback
Entire-Checkpoint: f957cd9849e0
* fix(playback): ignore recoverable hls diagnostics
Entire-Checkpoint: f957cd9849e0
* fix(playback): polish diagnostic fallback banner
Entire-Checkpoint: f957cd9849e0
* fix(xtream): preserve live category search scope
Entire-Checkpoint: f957cd9849e0
2026-05-10 17:27:54 +02:00
4gray
5f4cf01467
fix(playback): avoid redundant VideoJS source resets ( #920 )
...
* fix(playback): avoid redundant VideoJS source resets
* fix(playback): clean up cleared VideoJS sources
* refactor(playback): use signal APIs in VideoJS player
closes #608
2026-05-10 15:32:00 +02:00
4gray
724e4b1ab3
feat(playback): add embedded mpv (macos) stream recording ( #916 )
...
* feat(playback): add embedded mpv stream recording
Entire-Checkpoint: f957cd9849e0
* fix(playback): address embedded mpv recording review
Entire-Checkpoint: f957cd9849e0
* fix(playback): track mpv recording auto-stop replies
Entire-Checkpoint: f957cd9849e0
2026-05-10 12:27:09 +02:00
4gray
4a755b43ec
Merge pull request #885 from sapireli/fix/xtream-catchup-server-timezone
...
fix(xtream): use server timezone when constructing catchup/timeshift URLs
2026-05-09 19:28:16 +02:00
4gray
aead89e3e6
fix(xtream): keep category management available
...
Fixes #913
2026-05-09 18:34:57 +02:00
4gray
8b3b1c9bb7
chore: merge master into xtream timezone fix
2026-05-09 16:15:01 +02:00
4gray
134b5fb779
Merge pull request #911 from 4gray/codex/stalker-radio
...
feat(stalker): add radio support
2026-05-09 15:50:10 +02:00
4gray
0d93301520
fix(stalker): address radio review feedback
...
Entire-Checkpoint: f957cd9849e0
2026-05-09 13:08:41 +02:00
4gray
9261794b4a
Merge pull request #902 from weeco/feat/xtream-xmltv-epg-fallback
...
feat(xtream): fall back to uploaded XMLTV when provider has no EPG
2026-05-09 13:06:51 +02:00
4gray
4020822b90
fix(xtream): prevent stale epg queue fetches
2026-05-09 12:08:14 +02:00
4gray
ab905af285
feat(stalker): add radio support
...
Entire-Checkpoint: f957cd9849e0
2026-05-09 01:28:39 +02:00
4gray
3bafeb8377
Merge remote-tracking branch 'origin/master' into search_all_fix
...
# Conflicts:
# libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.html
2026-05-08 22:01:01 +02:00
4gray
6efa8b9072
fix(xtream): preserve live search playback sidebar
...
Entire-Checkpoint: f957cd9849e0
2026-05-08 21:05:10 +02:00
4gray
90cda8731c
test(portal-shared-util): mock double-click setting
2026-05-08 20:17:18 +02:00
4gray
e350a2ea96
fix double-click external playback handling
2026-05-08 10:59:52 +02:00
Tedd Johnson
626948f2f5
Add double-click stream open setting
2026-05-07 20:03:33 -07:00
Eliran Sapir
a3a4c6b5ea
Fix Xtream section search across categories
2026-05-07 17:42:29 -04:00
weeco
505e75b67e
fix(xtream): address review feedback on XMLTV fallback PR
...
- pruneEphemeralMaps now uses getCached() so TTL-expired entries also
drop their XMLTV preview / channel-id mapping, instead of clinging
to them until the next explicit cache read.
- portal-channels-list attaches a .catch() to the now-async enqueue so
any future internal rejection surfaces in the console rather than
bubbling silently as an unhandled promise rejection.
- XtreamXmltvFallbackService binds the bridge receiver when calling
the extracted function reference, in case a preload wrapper relies
on `this`.
Adds a regression test for the TTL-aware prune.
2026-05-07 08:52:59 -07:00