Commit Graph
1003 Commits
Author SHA1 Message Date
euzuandGitHub 978b3bb4f0 api-proxy: configurable credential generation for new users (#942)
* api-proxy: configurable credential generation for new users
* fix: HLS test fail
2026-10-27 21:55:55 +01:00
euzu 63487beef9 ci: bump version v3.3.166 2026-10-27 13:41:30 +00:00
euzuandGitHub ab4f41e517 fix: accept ranged VOD responses mislabeled text/html (#940)
* fix: accept ranged VOD responses mislabeled text/html

Skip the HTML content-type rejection for 206 and Content-Range
responses so valid media from providers with a wrong Content-Type
plays in reverse proxy mode.

* add playback_provider to bind provider profile

Lets mapped provider:// playback URLs resolve on inputs whose url and
aliases are plain http(s), fixing 503 "Provider config not found".
2026-10-27 14:39:12 +01:00
euzu c97a9cfbaf ci: bump version v3.3.165 2026-10-27 12:45:58 +00:00
0892c9d9e6 Feature/hls origin telemetry (#939)
* hls: add origin transfer telemetry

Measure existing shared-HLS origin fetches (segment, map, key,
manifest) and expose per-input availability and transfer quality at
GET /api/v1/hls/origin-telemetry and via the MCP tool
get_hls_origin_telemetry. Off by default via
reverse_proxy.hls_origin_telemetry, configurable in the Web UI.

Also split the reverse proxy config page into tabs.

* hls: add origin transfer telemetry

Measure existing shared-HLS origin fetches (segment, map, key,
manifest) and expose per-input availability and transfer quality at
GET /api/v1/hls/origin-telemetry and via the MCP tool
get_hls_origin_telemetry. Off by default via
reverse_proxy.hls_origin_telemetry, configurable in the Web UI.

Also split the reverse proxy config page into tabs.

* hls: add origin transfer telemetry

Measure existing shared-HLS origin fetches (segment, map, key,
manifest) and expose per-input availability and transfer quality at
GET /api/v1/hls/origin-telemetry and via the MCP tool
get_hls_origin_telemetry. Off by default via
reverse_proxy.hls_origin_telemetry, configurable in the Web UI.

Also split the reverse proxy config page into tabs.

---------

Co-authored-by: euzu <euzu@proton.me>
2026-10-27 13:27:21 +01:00
euzu 7f01af1675 ci: bump version v3.3.164 2026-10-27 09:18:43 +00:00
euzu e4dc430424 ci: bump version v3.3.163 2026-10-27 08:40:07 +00:00
euzu d65409246c ci: bump version v3.3.162 2026-10-24 14:36:00 +00:00
euzuandGitHub 0cb5e5e7df - Dependency upgrade (#934)
* - Dependency upgrade
- Slotfree HLS manifest fetch (partial)
2026-10-24 16:33:30 +02:00
euzu 7031ed2293 ci: bump version v3.3.161 2026-10-24 07:52:11 +00:00
euzuandGitHub 7c82bf0b5d Feature/mcp (#933)
* Added
 - MCP server with Web UI config, stdio bridge and docs

Fixes
- GET /api/v1/stream-history rejected the `search_field` parameter the Web UI
  sends (400), because axum's Query cannot read repeated keys into a list.
  Add a FormQuery extractor (serde_html_form) and use it there.
- hls tests were flaky: HlsProxyManager::new() put every test manager's
  segment cache into the shared /tmp/tuliprox/cache/hls, and the orphan
  session cleanup of one manager deleted the files of parallel tests
  (surfacing as MissingTimestampAnchor / TerminalUnavailable). Each manager
  now owns a private cache directory that is removed on drop.

* fixed documentation: db dump paths and flag usage in operations-debugging

* Logs is a standalone Web UI view.

* mcp playlist iterator

* mcp playlist iterator

* media server import uses own categories

* mcp playlist iterator

* Playlit Update view layout changed
2026-10-24 09:49:44 +02:00
euzu 1ff90f0f7c ci: bump version v3.3.160 2026-10-23 13:04:09 +00:00
euzu 9adb22d8c9 ci: bump version v3.3.159 2026-10-23 11:26:58 +00:00
euzuandGitHub d9597c46ee Fix/media server url (#931)
* media-server scheme or jellyfin_emby_plex

select_provider_stream_url now accepts a media-server:// reference when
the input type is Emby, Jellyfin or Plex. Other input types still reject
it.
2026-10-23 12:57:14 +02:00
knylbyte a9f68431d1 feat (hls): add HLS origin recovery preferences and automatic segment timeouts 2026-10-22 10:28:59 +02:00
euzu 6a4b5f618b ci: bump version v3.3.158 2026-10-20 22:24:43 +00:00
euzu 572db09858 ci: bump version v3.3.157 2026-10-20 17:57:27 +00:00
euzuandGitHub bdd5850cd4 addded Emby/Jellyfin catalog import to media-server (#927)
- Emby/Jellyfin client: token/api_key/login auth, paging, Range playback, artwork
- Jellyfin uses only Authorization: MediaBrowser header (Jellyfin 12 compatible)
- AnyMediaServerCatalogClient dispatch, shared helpers reused by Plex
- Update/Refresh for Emby/Jellyfin inputs in the Web UI
- BREAKING: remove unused media_server options (playback, image_policy,
  catalog.refresh_mode/refresh_on_startup/include_paths/include_user_state)
2026-10-20 19:56:10 +02:00
euzu 0c13a0d701 ci: bump version v3.3.156 2026-10-19 15:43:54 +00:00
knylbyteandGitHub 5ae547f5e5 FIX: stabilize shared HLS playback, recovery and account handovers (#925)
* fix (hls): preserve playback reserve across cache eviction

keep a stable session media clock and completed segment timings so cache
eviction and origin rollovers cannot reset playback reserve.

update segment fixtures and cover reserve stability after collection.

* fix (hls): prevent playback stalls during origin manifest retries

mark the origin as degraded on the first retryable manifest failure, cap
retry-after delays, and reevaluate reserve independently of client polling.

use a bounded state commit after an expired splice deadline instead of
leaving the lease live when terminal media cannot be published safely.

* fix (hls): serve custom responses after the live splice deadline

publish a finite lease-bound channel_unavailable playlist on the existing
manifest route when a safe live splice is no longer possible.

renew lease and session activity on successful custom-segment requests
and retain concrete preparation failure diagnostics.

* fix(hls): persist origin qualification for short playlists

Share qualification and retry receipts across leases, preserve them while media publication is pending, and allow controlled recovery after expired acceptance episodes. Prefer eligible regular candidates before short fallbacks.

Add startup, revalidation, replay, cookie and endpoint regression coverage, and document short-window behavior.

Validation during implementation: Linux make test (7009 passed, 23 ignored), focused HLS and endpoint suites, format checks, Clippy and Markdown lint. Offline production library and backend checks passed after the import fix.

* fix(hls): reconcile cache write budgets and revision reclamation

Transfer reserved bytes atomically through staging and publication, preserve cleanup ownership across cancellation, and retire unpinned revisions during local and global reclamation.

Version temp registrations during inventory scans, remove production panic calls, and isolate debug diagnostics from admission results.

Validation: 1,162 HLS tests and 7,038 workspace tests passed; fmt-check, lint, test, markdown-lint and isolated production Clippy passed with dev-slim.

* feat (ai): add local codex files

* fix (hls): replace invalid origin accounts in shared HLS sessions

* fix (hls): synchronize origin account handovers across WebUI viewers

* fix (hls): preserve same-account resume work and backpressure

* fix (hls): resume reduced retries without crossing generations
Allow eligible exhausted acceptance episodes to select reduced retry candidates
while preserving generation, candidate, workload and timing guards. Keep
recovery chains bound to their generation, including changes between selection
and commit.

Add regressions for repaired and persistent resource conflicts, generation
isolation and media delivery through the app's local HTTP origin. Keep shared
manifest fixtures under test/fixtures/hls/reduced-retry.
2026-10-19 17:42:50 +02:00
euzu 86d19f955c ci: bump version v3.3.155 2026-10-16 08:43:12 +00:00
euzu 189bab6d71 ci: bump version v3.3.154 2026-10-14 18:38:00 +00:00
euzu 33352621bd ci: bump version v3.3.153 2026-10-14 06:53:04 +00:00
euzuandGitHub 824828f6c7 fix hls: stale stream rows, panel blanking and re-entry window jumps (#918)
* fix hls: stale stream rows, panel blanking and re-entry window jumps
* fix session: release grace-expired slot once, match rows by token
* rusttls vulnerability fixed
* fix testkit: keep scenario run id across bootstrap retries
2026-10-14 08:51:46 +02:00
euzu 41b66ce70a ci: bump version v3.3.152 2026-10-13 20:32:50 +00:00
euzuandGitHub 69040f022b Feature/maintenance (#916)
* Maintenance mode
* fix(hls): release origin slot before next origin I/O
2026-10-13 22:30:21 +02:00
euzu 588b954eeb ci: bump version v3.3.151 2026-10-13 19:01:05 +00:00
euzu 8ca57ad8d8 ci: bump version v3.3.150 2026-10-12 20:44:20 +00:00
euzuandGitHub 0ddc3e21cc feat(hls): add optimistic startup mode (#914) 2026-10-12 22:43:06 +02:00
euzu 0d6b40e212 ci: bump version v3.3.149 2026-10-12 19:44:42 +00:00
euzuandGitHub dc6e22a70a fix(hls): skip unexposed 404 live head (#913) 2026-10-12 21:43:31 +02:00
euzu 084d68e74d ci: bump version v3.3.148 2026-10-12 19:07:08 +00:00
euzuandGitHub b6bab647df feat(watch): group added/removed contexts per watch entry (#912)
* feat(watch): group added/removed contexts per watch entry

- watch entries: regex string or {pattern, on:
[channels|group_added|group_removed]}
- one playlist.watch.changed per refresh with WatchChange list;
playlist.groups.changed aliased
- Telegram/ntfy message length limits
- web UI: Mapping and Watch sub pages, new Mapping icon
- ClusterFlags on create_bitset!, bitflags removed

BREAKING CHANGE: playlist.watch.changed templates must use the new
watch.* fields

* feat(watch): group added/removed contexts per watch entry

- watch entries: regex string or {pattern, on:
[channels|group_added|group_removed]}
- one playlist.watch.changed per refresh with WatchChange list;
playlist.groups.changed aliased
- Telegram/ntfy message length limits
- web UI: Mapping and Watch sub pages, new Mapping icon
- ClusterFlags on create_bitset!, bitflags removed

BREAKING CHANGE: playlist.watch.changed templates must use the new
watch.* fields
2026-10-12 21:05:55 +02:00
euzu 45c10edd3d ci: bump version v3.3.147 2026-10-12 14:36:37 +00:00
euzu d9482aeca1 ci: bump version v3.3.146 2026-10-12 07:54:15 +00:00
euzu e6032679ac ci: bump version v3.3.145 2026-10-09 23:15:32 +00:00
euzuandGitHub a3124a37f5 fix epg: adopt guide channel ID casing on matched live streams, fix frontend: hide column rail on empty tables (#908)
* - fix epg: adopt guide channel ID casing on matched live streams
Synchronize the stream's `epg_channel_id` to the exact casing of the
matched XMLTV guide channel. This fixes exact-key B+Tree lookups in short
EPG and client API responses when stream and guide IDs differ in case.

- fix frontend: hide column rail on empty tables

* - fix epg: adopt guide channel ID casing on matched live streams
Synchronize the stream's `epg_channel_id` to the exact casing of the
matched XMLTV guide channel. This fixes exact-key B+Tree lookups in short
EPG and client API responses when stream and guide IDs differ in case.

- fix frontend: hide column rail on empty tables
2026-10-09 23:12:57 +02:00
euzu d158b152d2 ci: bump version v3.3.144 2026-10-09 15:43:05 +00:00
d35875e3d1 fix hls close revision file at reader deadline (#907)
* fix hls close revision file at reader deadline

Move the progressive revision reader onto its own task and feed the
response stream through a bounded channel. At the deadline the watchdog
aborts the reader, so the file handle and revision pin are released
even if a stalled client never polls the stream again.

Each open revision file now holds its own pin, so GC cannot retire a
revision while a handle is open, including one held by an in-flight
blocking read.

* fix hls close revision file at reader deadline

Move the progressive revision reader onto its own task and feed the
response stream through a bounded channel. At the deadline the watchdog
aborts the reader, so the file handle and revision pin are released
even if a stalled client never polls the stream again.

Each open revision file now holds its own pin, so GC cannot retire a
revision while a handle is open, including one held by an in-flight
blocking read.

---------

Co-authored-by: euzu <euzu@proton.me>
2026-10-09 17:41:39 +02:00
euzu 7cfd9ac3a9 ci: bump version v3.3.143 2026-10-08 11:29:50 +00:00
euzuandGitHub 62aea2a2fe persist table layouts and unify column metadata (#906)
* **New Features**
  * Customize table columns by showing, hiding, and reordering them, with keyboard or pointer controls.
  * Save layouts per account, restore defaults, and resolve conflicts when preferences change elsewhere. On installations without web authentication, settings are shared.
  * CSV tables now support saved layouts for recognized table structures.
* **Bug Fixes**
  * Improved pagination bounds and page-size validation.
  * Settings requests now return clearer errors for oversized or unreadable request bodies, and recheck access after waiting for settings to become available.
* **Documentation**
  * Added guidance for table customization and the settings API.
2026-10-08 13:28:41 +02:00
euzu e5313faa38 ci: bump version v3.3.142 2026-10-07 16:42:29 +00:00
75dab00847 fix(frontend): clean up websocket callbacks and reconnect timers on s… (#904)
* fix(frontend): clean up websocket callbacks and reconnect timers on session expiry

* fix(frontend): clean up websocket callbacks and reconnect timers on session expiry

---------

Co-authored-by: euzu <euzu@proton.me>
2026-10-07 18:41:13 +02:00
euzu ac0dad8342 ci: bump version v3.3.141 2026-10-07 13:42:46 +00:00
euzuandGitHub 91433fe37f Fix/dvr recording (#903)
* fix(dvr): correct source resolution, HLS headers and proxy routing

* fix(dvr): support concurrent live recordings within provider capacity
2026-10-07 15:41:19 +02:00
euzu aa687e6e3f ci: bump version v3.3.140 2026-10-06 17:29:10 +00:00
euzu 509e2cfeee ci: bump version v3.3.139 2026-10-06 05:56:43 +00:00
euzuandGitHub d27570bc79 Refactored EPG View (#901)
* **New Features**
  * Added an EPG group view with channel counts, programme details, and channel search.
  * Added timeline zooming and panning, recording controls for eligible upcoming programmes, and a resizable side panel with keyboard and pointer controls.
* **Improvements**
  * EPG group and grid results support JSON or CBOR responses and show up to 1,000 channels per group.
  * Channel filters support case-insensitive text and regular expressions; invalid patterns are rejected with an error.
2026-10-06 07:55:19 +02:00
euzu 7511f719f1 ci: bump version v3.3.138 2026-10-05 17:56:23 +00:00
euzuandGitHub b409b784b8 WebUI fixes (#900)
Some WebUI fixes
2026-10-05 19:55:13 +02:00