4gray
fc449ca73e
feat(electron): harden renderer security
...
Scope playback request header overrides to active stream origins and document the Electron runtime security contract.
2026-05-22 23:31:41 +03:00
4gray
582422c512
refactor(runtime): gate settings backup file save by capability
2026-05-22 13:41:24 +03:00
4gray
c9a0d5210e
refactor(runtime): gate settings sections by capability
2026-05-22 13:41:24 +03:00
4gray
09e2e08fc1
refactor(runtime): gate settings external players by capability
2026-05-22 13:40:14 +03:00
4gray
b4fd93354e
refactor(runtime): enable pwa xtream section navigation
2026-05-22 13:38:53 +03:00
4gray
f626e176d2
refactor(runtime): require playlist storage bridge
2026-05-22 13:37:36 +03:00
4gray
4603bd83d5
refactor(runtime): gate playlist refresh by capability
2026-05-22 13:36:39 +03:00
4gray
9a5620bf95
refactor(runtime): require downloads bridge surface
2026-05-22 13:35:03 +03:00
4gray
109aea0794
refactor(runtime): require external player bridge methods
2026-05-22 13:35:03 +03:00
4gray
3e398f1d1a
refactor(remote-control): gate live bridge by capability
2026-05-22 13:35:03 +03:00
4gray
8cfc40f59b
refactor(xtream): gate data source by sqlite capability
2026-05-22 13:35:03 +03:00
4gray
c571c57c5b
refactor(runtime): centralize platform capabilities
2026-05-22 11:00:34 +03:00
4gray
36bce47764
merge: resolve master conflicts for pwa hardening
...
- merge origin/master into PR #964 and keep embedded MPV test on the isolated playback sub-entrypoint
- centralize EPG capability through DataService.supportsEpg and update PWA web-e2e expectations
- split BrowserAccessError copy between Electron and PWA diagnostics
2026-05-22 10:20:03 +03:00
4gray
9d69443d01
Merge pull request #963 from 4gray/agent/embedded-mpv-ci-runtime-cache
...
ci: cache embedded mpv runtime
2026-05-22 09:38:26 +03:00
4gray
55efc24608
fix(pwa): harden self-hosted runtime boundaries
2026-05-22 02:09:57 +03:00
4gray
0b19155469
ci: cache embedded mpv runtime
2026-05-22 02:02:06 +03:00
4gray
2a769ad44e
Merge origin/master into PR 955
2026-05-22 01:34:56 +03:00
4gray
2ecb5c28f4
fix(dashboard): address PR review feedback
2026-05-22 00:59:17 +03:00
4gray
67d512d44c
Merge pull request #961 from 4gray/agent/pwa-provider-target-flow
...
fix(docker): exclude agent worktrees from build context
2026-05-22 00:47:22 +03:00
4gray
b2909a1186
feat(workspace): add keyboard shortcuts help ( #957 )
...
* feat(workspace): add keyboard shortcuts help
* style(workspace): polish keyboard shortcuts dialog
* fix(workspace): address shortcuts review feedback
* docs(workspace): clarify desktop shortcut availability
* refactor(workspace): split keyboard shortcut definitions
2026-05-21 19:15:46 +03:00
4gray
401d434bce
test(pwa): cover self-hosted provider target flow
2026-05-21 11:19:04 +03:00
4gray
fd59447064
docs(docker): restore self-hosted PWA compose flow
...
* docs(docker): restore self-hosted PWA compose flow
* fix(docker): supervise self-hosted runtime processes
* fix(docker): exit cleanly on container stop
2026-05-21 09:30:57 +02: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
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
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
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
e7db920543
fix(settings): clarify external player path hints ( #929 )
...
* fix(settings): clarify external player path hints
* fix(settings): gate external player hints to desktop
2026-05-12 19:49:14 +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
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
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
aead89e3e6
fix(xtream): keep category management available
...
Fixes #913
2026-05-09 18:34:57 +02:00
4gray
ab905af285
feat(stalker): add radio support
...
Entire-Checkpoint: f957cd9849e0
2026-05-09 01:28:39 +02:00
4gray
e350a2ea96
fix double-click external playback handling
2026-05-08 10:59:52 +02:00
4gray
ed6302c059
feat(m3u): add channel list sorting controls
...
Entire-Checkpoint: f957cd9849e0
2026-05-06 00:14:52 +02:00
4gray and Claude Opus 4.7
7478ea8665
docs(embedded-mpv): document renderer architecture and reactivity rules
...
Capture the audit findings and refactor outcome in the canonical embedded-mpv
architecture doc so the next person to extend the player does not re-introduce
the same class of regression.
New "Renderer Architecture And Reactivity" section covers:
- The post-refactor file layout (format utils, shortcuts, overlay-visibility,
ui-state, session-controller, view component) and what each owns.
- The bounds compositing strategy: HIDDEN_BOUNDS for modal overlays,
partial bottom cutout for control popovers, full host rect otherwise —
plus why (NSView paints over WebContents, z-index is unwinnable).
- The reactivity rule learned from the audit: any signal read inside an
effect that feeds a one-shot side effect must be wrapped in untracked().
Only re-trigger sources stay tracked.
- A short ledger of the four bugs from the audit (support write loop,
volume-tracked session restart, scheduleControlsHide transitive deps,
stalled-tracker 2 Hz no-op) so they do not get reintroduced.
- IPC safety notes: gate on sessionId() not session()?.id; guardIpc
swallows addon-side throws.
- Pointer to the powerSaveBlocker integration.
Also documents the bundle 3 native surface additions (sid, speed,
video-aspect-override observers and exports, capability probe via
EmbeddedMpvSupport.capabilities) so renderers can feature-detect against
older addon binaries.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
Entire-Checkpoint: f957cd9849e0
2026-05-05 16:45:17 +02:00
4gray and Claude Opus 4.7
e192cba776
feat(player): add VLC reuse-instance setting ( #893 )
...
VLC was unconditionally spawned per click — VLC's own single-instance
preference fails because the per-launch RC args defeat its D-Bus
forwarder. Mirror the existing MPV reuse pattern so users can opt in to
driving one tracked VLC via its RC interface (clear + add) instead of
opening a new window every stream.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
Entire-Checkpoint: f957cd9849e0
2026-05-05 00:55:04 +02:00
4gray
6cbf2a1cfb
feat(m3u): add context menus to recent channels
...
Entire-Checkpoint: f957cd9849e0
2026-05-05 00:27:15 +02:00
4gray
e36c953865
feat(sidebar): implement shared collapse state for live-TV sidebar across components
...
Entire-Checkpoint: f957cd9849e0
2026-05-03 23:26:52 +02:00
4gray
15b6ba985a
feat(live-tv): collapsible sidebar in live tv views
...
Entire-Checkpoint: f957cd9849e0
2026-05-02 23:53:05 +02:00
4gray
4acb6f9853
docs(embedded-mpv): update local development instructions for Homebrew usage
...
Entire-Checkpoint: f957cd9849e0
2026-05-02 17:19:49 +02:00
4gray
31bddbd70f
ci: build embedded mpv artifacts on master
...
Entire-Checkpoint: 5b514fe72836
2026-05-02 09:02:05 +02:00