4gray
08b868d6c1
test(electron): harden runtime boundary coverage ( #1267 )
...
Adds contract-focused regression coverage for the Electron HTTP server,
remote-control events, settings events, and managed download paths, and makes
Tier A coverage fail closed when instrumentation fails or a runtime-owning
production file disappears from a project or from the merged Istanbul report.
The old `coverage:ci` exited 0 despite a `Failed to collect coverage`
diagnostic: libs/m3u-state/src/lib/effects.ts was simply absent from the merged
map. All 30 Tier A reports are now required, the merged map covers 710 files,
and effects.ts is reported as 0/159 instead of silently disappearing.
Also fixes remote static-file path containment for encoded, malformed, NUL,
POSIX and Win32-style traversal inputs, with behavior-preserving testability
seams.
Statements 69.27% -> 69.54%; http-server.ts 0% -> 90.21%,
remote-control.events.ts 0% -> 96.55%, settings.events.ts 59.25% -> 96.29%.
2026-07-26 22:27:50 +02:00
4gray
d308749e2c
fix(stalker): preserve is_series episode metadata ( #1218 )
2026-07-21 07:51:37 +02:00
4gray
48ff4b9cc5
fix(portal): remove redundant catalog type badges ( #1217 )
...
Remove redundant LIVE, VOD, and SERIES badges from homogeneous Xtream and Stalker catalog grids while preserving mixed-content badges and type-driven grid behavior.
2026-07-20 21:52:00 +02:00
4gray
c266eaa680
fix(packaging): preserve Flatpak Electron ELF for Zypak ( #1205 )
...
Fixes the launcher/Zypak regression reported in #1203 . The additional GPU/video.js behavior remains tracked separately in that issue.
2026-07-18 22:42:45 +02:00
4gray
8fdac824fd
feat(packaging): ship Linux embedded MPV frame-copy runtime ( #1200 )
...
* docs: design Linux frame-copy packaging
* docs: plan Linux frame-copy packaging
* feat(packaging): define Linux frame-copy profiles
* fix(packaging): reject inherited profile names
* feat(embedded-mpv): validate staged Linux runtime
* fix(embedded-mpv): require Linux source packages
* fix(embedded-mpv): harden Linux runtime staging
* feat(embedded-mpv): build LGPL Linux runtime
* fix(embedded-mpv): pin Linux runtime inputs
* feat(embedded-mpv): build relocatable Linux helper
* fix(embedded-mpv): require bundled Linux runtime
* fix(embedded-mpv): make Linux runtime portable
* feat(packaging): ship Linux frame-copy artifacts
* fix(embedded-mpv): verify Linux helper linkage
* fix(packaging): enforce Linux frame-copy isolation
* fix(embedded-mpv): pin Linux display data
* docs(embedded-mpv): document Linux frame-copy packaging
* feat(embedded-mpv): probe Linux frame-copy runtime
* test(embedded-mpv): smoke packaged Linux frame-copy
* docs(embedded-mpv): clarify Linux system runtime baseline
* fix(embedded-mpv): harden Linux runtime capability gate
* ci: verify Linux frame-copy packages
* test(embedded-mpv): harden packaged Linux smoke
* test(embedded-mpv): preserve packaged GL mode
* test(packaging): harden Linux package probes
* fix(embedded-mpv): enable private Snap shared memory
* fix(embedded-mpv): sanitize Linux helper environment
* fix(packaging): enforce private Snap memory semantics
* fix(packaging): reject ambiguous Snap memory metadata
* fix(embedded-mpv): prioritize trusted Snap GL
* fix(packaging): reject advanced Snap YAML semantics
* fix(packaging): reject arbitrary Snap YAML aliases
* feat(packaging): ship Linux runtime license notices
* docs(embedded-mpv): document Linux runtime distribution
* fix(packaging): parse Snap trailing comments safely
* fix(release): gate Snap publish on public source release
* fix(packaging): strip VCS metadata from source bundle
* docs(packaging): clarify Linux source release gate
* test(embedded-mpv): smoke missing bundled libmpv
* style(embedded-mpv): format final validation inputs
* fix(e2e): satisfy fixture index signature typing
* fix(ci): declare fontconfig gperf generator
* fix(embedded-mpv): hash runtime cache identities
* fix(packaging): harden Linux frame-copy delivery
* fix(packaging): tighten runtime delivery gates
* fix(ci): decouple Linux runtime matrix
* fix(packaging): harden Linux frame-copy delivery
* fix(packaging): validate Linux frame-copy runtimes
* fix(packaging): scope Snap Electron library checks
* feat(packaging): ship Linux frame-copy runtimes
* fix(packaging): improve Linux runtime smoke diagnostics
* fix(packaging): expose bounded helper probe details
* test(packaging): trace Snap EGL probe failures
* fix(packaging): prefer core22 ABI in Snap helper
* fix(packaging): bound helper probe capture
* fix(packaging): harden Linux frame-copy releases
* fix(packaging): canonicalize libplacebo submodule identity
* fix(packaging): make source archive inspection portable
* fix(packaging): harden Snap release verification
2026-07-18 17:28:22 +02:00
4gray
c6ed504723
feat(playback): add shared picture-in-picture controls ( #1199 )
...
* docs(playback): design shared web picture-in-picture
* docs(playback): keep picture-in-picture exit available
* docs(playback): plan shared web picture-in-picture
* feat(playback): add picture-in-picture controls contract
* feat(playback): add shared web picture-in-picture
* feat(playback): expose shared picture-in-picture action
* docs(playback): document shared web picture-in-picture
* test(playback): cover shared picture-in-picture flow
* test(playback): wait for PiP video in Electron E2E
* refactor(playback): extract picture-in-picture controller
2026-07-17 22:11:29 +02:00
4gray
beb62db314
feat(settings): add shared web player controls toggle ( #1198 )
...
* docs(playback): design shared controls setting
* docs(playback): plan shared controls setting
* feat(settings): persist shared web controls preference
* test(settings): harden shared controls normalization coverage
* feat(settings): expose shared web controls toggle
* fix(settings): label shared controls toggle
* feat(playback): resolve shared controls from settings
* test(playback): cover shared controls setting
* docs(playback): document shared controls preference
* fix(playback): await settings before host creation
* fix(settings): normalize shared controls updates
2026-07-17 13:38:06 +02:00
4gray and Lars Emig
4e572c60ca
feat(videojs): add feature-flagged shared controls ( #1195 )
...
* feat(videojs): add feature-flagged shared controls
Rebuild the Video.js shared-controls integration on the current player lifecycle with Tech rebinds, source-scoped tracks, reset ordering, volume preservation, diagnostics gating, and default-off compatibility.
Credits and supersedes the stacked implementation proposed in #1153 .
Co-authored-by: Lars Emig <lars.emig@pickware.de >
* fix(videojs): harden MPEG-TS reset lifecycle
---------
Co-authored-by: Lars Emig <lars.emig@pickware.de >
2026-07-16 23:08:18 +02:00
4gray
c49ea2f6a8
feat(html-player): add feature-flagged shared controls ( #1194 )
...
* feat(html-player): bridge engine state to shared controls
* fix(html-player): avoid HLS subtitle event reentry
* fix(html-player): restore delayed HLS default subtitles
* refactor(html-player): split controls bridge collaborators
* feat(html-player): add feature-flagged shared controls
* test(html-player): cover shared-controls source ownership
* feat(html-player): pass shared-controls playback metadata
* docs(player-controls): describe HTML5 shared-controls bridge
* docs(player-controls): clarify HTML5 rollout effect
* fix(html-player): reveal diagnostics from fullscreen
* fix(html-player): defer HLS event resolution
* refactor(html-player): isolate video element session
2026-07-16 21:30:41 +02:00
4gray
f611ea3d7c
feat(embedded-mpv): use shared controls for frame-copy ( #1193 )
...
* docs(embedded-mpv): plan frame-copy shared controls
* feat(embedded-mpv): adapt frame-copy sessions to shared controls
* fix(embedded-mpv): correlate recording control updates
* fix(embedded-mpv): accept recording ack before command resolve
* fix(embedded-mpv): serialize delayed recording commands
* fix(embedded-mpv): latch buffered recording outcomes
* feat(embedded-mpv): use shared controls for frame-copy
* fix(embedded-mpv): isolate recording ticks by engine
* fix(embedded-mpv): reset controls on engine handoff
* docs(embedded-mpv): document frame-copy shared controls
* docs(embedded-mpv): normalize shared-controls plans
* fix(embedded-mpv): isolate legacy feedback on handoff
* fix(player-controls): block toggles while stalled
* refactor(embedded-mpv): isolate controls timing
* fix(player-controls): reset recording feedback on handoff
* fix(embedded-mpv): preserve newer session snapshots
2026-07-16 18:47:32 +02:00