Commit Graph
2488 Commits
Author SHA1 Message Date
euzuandGitHub bfcd66ffcc Fix/catchup (#778)
* Fix: setting auth web_ui token_ttl_mins = 0 fixed.
* Fix: catchup
* New: added playlist update log view
* Fix: Landing Page
New: "Last Page"  added for Landing Page selection
2026-06-18 16:03:09 +02:00
euzu 026aa1adb8 ci: bump version v3.3.54 v3.3.54 2026-06-15 12:10:26 +00:00
euzuandGitHub 9e83d24864 Feature/optimizations (#777)
* perf: binary-search EPG programme lookup
Replaces the linear position() scan with a binary search via partition_point for EPG programmes. Reduces complexity to O(log p).
* perf: cache interned PlaylistItemType label
Avoids repetitive hash-map lookups during sorting and filtering. The five fixed labels are now interned once via OnceLock and returned as a cheap Arc clone.
* perf: avoid per-event String allocation in web-UI XMLTV parser
Uses borrowed Cow types instead of allocating a new String for every element name. Tracks the active text state using a small TextTag enum.
* perf: throttle per-chunk download control poll
Throttles the control_signal lock polling to a 200ms interval on multi-GB downloads to prevent CPU thrashing. Immediate actions (pause/cancel) remain guaranteed via control_notify.
* perf: pre-size filtered channel buffers in apply_filter_to_playlist
Pre-allocates the filtered channel vector based on the source group length. Eliminates step-by-step reallocations on large playlists.
* fix: surface playlist cache load failures instead of silent empty fallback
Replaces silent error swallowing with real error logging (distinguishing missing files from corruption) while preserving the empty fallback behavior.
* perf: remove redundant first drain loop in get_remote_content_as_file
Removes a dead, redundant loop. The stream body is now consumed only once, allowing the idle timeout to protect the transfer correctly.
* perf: back off instead of busy-spinning on empty client-stream chunks
Introduces a short Sleep backoff (Poll::Pending) when a provider sends continuous empty keep-alive chunks. Prevents the CPU from spinning hot.
* perf: make library orphan cleanup linear instead of O(n^2)
Reduces the complexity of cleaning up orphaned entries from O(n^2) to linear O(n). Loads the metadata library only once and pre-computes partitions.
* perf: indexed batched merge for series expansion instead of O(n^2) scans
Replaces expensive O(n^2) scans during series expansion with index-based batch processing. Builds temporary lookup indexes and merges groups linearly.
* perf: pre-size group flatten buffers to reduce reallocation churn
Pre-allocates target merge vectors and category indexes to eliminate repeated memory reallocations when flattening large target playlists.
* perf: stream custom provider playlist endpoint instead of materializing it
Switches from full in-memory materialization to lazy conversion and streaming of JSON/binary responses. Massively reduces the memory footprint.
* refactor: centralize InputType batch/family checks behind enum helpers
Moves scattered matches! checks for M3u/Xtream types into centralized enum helpers (is_batch(), etc.) to prevent logic drift.
* refactor: centralize XMLTV tag/attribute literals into named constants
Replaces hardcoded inline strings in the XMLTV parser with named constants (EPG_TAG_TITLE, etc.) as a single source of truth.
* refactor: derive GeoIpUpdateError Display/Error via thiserror
Replaces manual Display and Error implementations with the thiserror macro, allowing new error variants to self-document their formatting.
* refactor: attach per-cluster facts to XtreamCluster instead of scattered matches
Centralizes redundant API actions and collection name mappings directly onto the XtreamCluster struct instead of using scattered match blocks.
* refactor: centralize PlaylistItemType video/series classification
Introduces is_video() / is_series() on the enum to unify duplicate matches! checks across filters, probes, and tracking modules.
* feat: add per-stage summary logs to VOD/series resolve queueing
Adds a concise debug summary per processing stage (total counters and elapsed time) to make hot-path diagnostics easier without raising the log level.
* refactor: generate ItemField get/set from a single direct-field list
Uses a callback macro to synchronously generate both getter and setter blocks for directly-bound fields (Name, Url, etc.) from a single master list.
* refactor: derive input-type routing from a single capability descriptor
Bundles InputType behaviors (backends, connection rules) into a single capabilities() descriptor to prevent bugs when adding new variants.
* refactor: derive output-format routing from a single capability descriptor
Centralizes output format features (filter, EPG, and cache support) into a single TargetCapabilities descriptor instead of spreading logic across no-op match arms.
2026-06-15 14:09:31 +02:00
euzu 6c95116c20 ci: bump version v3.3.53 v3.3.53 2026-06-12 21:41:06 +00:00
euzuandGitHub 8c3ab50271 Fixed webui path for authentication (#776)
Fix: Web UI now supports mounting under custom path prefixes with correct routing
2026-06-12 23:39:20 +02:00
euzu 3083fc5f30 ci: bump version v3.3.52 v3.3.52 2026-06-09 15:33:24 +00:00
euzu c70f1fc3e9 Group editor table fixed 2026-06-09 17:29:57 +02:00
euzu a1dca6602c Merge remote-tracking branch 'github/develop' into develop 2026-06-09 16:53:23 +02:00
euzuandGitHub c2ff914506 Feature/custom video stream disable (#775)
* custom Video stream disable with configurable http status code
2026-06-09 16:53:09 +02:00
euzu b5227acdb3 Merge remote-tracking branch 'github/develop' into develop 2026-06-08 20:11:53 +02:00
euzu 52e9952572 ci: bump version v3.3.51 v3.3.51 2026-06-08 17:30:56 +00:00
euzu f2df34963a Merge remote-tracking branch 'github/develop' into develop 2026-06-08 19:30:01 +02:00
euzuandGitHub 41d716efb6 Feature/disk usage (#774)
* Added DiskUsage stats and Alert
- Fixed web_auth_disabled  bug
2026-06-08 19:29:45 +02:00
euzu 4f132318aa Merge remote-tracking branch 'github/develop' into develop 2026-06-08 12:03:00 +02:00
euzu 94ea3b1982 ci: bump version v3.3.50 v3.3.50 2026-06-08 09:57:51 +00:00
euzuandGitHub c1f0063e07 Feature/show local time (#773)
* Fixed sanitizing url scheme batch and provder
* local date in Stream history
* Fixed EPG programme time display to render in local timezone for improved readability.
* Improved stream history date range filtering to accurately use local date boundaries.
* Enhanced credential sanitization for stream URLs to properly mask sensitive information.
* Fix EPG path selection for mixed Xtream/M3U targets
* Fix EPG selection and complete Xtream series_info for input/custom requests
* Add configurable interner GC tuning
2026-06-08 11:55:51 +02:00
euzu be55c32054 fixed sanitizing url scheme batch and provder 2026-06-06 13:32:48 +02:00
euzu 17a7aa84f1 ci: bump version v3.3.49 v3.3.49 2026-06-06 11:08:33 +00:00
euzuandGitHub a2d9c1e076 Feature/user playlist range select and code deduplication (#772)
* refactored some code duplications
* User playlist editor shift+mouse selektion added
* added russion translation
2026-06-06 13:06:28 +02:00
euzu e8ec8038b6 ci: bump version v3.3.48 v3.3.48 2026-06-05 12:31:20 +00:00
euzuandGitHub 40adbe0d40 catchup handling fix, streaming fix (#771)
* catchup handling fix
2026-06-05 10:00:53 +02:00
euzu 71238b7626 ci: bump version v3.3.47 v3.3.47 2026-06-04 18:08:54 +00:00
Juanjo PresaandGitHub 585efcca47 feat: improve Trakt list curation matching (#747)
* feat: paginate Trakt list fetching

* feat: allow TMDB-only Trakt list matching

* chore: address Trakt review comments

* feat: add public Trakt charts

* fix: keep Trakt category clones distinct

* fix: avoid truncating Trakt chart ranks

* fix: keep Trakt series category episodes

* trakt improvements
2026-06-04 20:07:30 +02:00
euzu 1429b941a8 ci: bump version v3.3.46 v3.3.46 2026-06-04 16:01:53 +00:00
euzuandGitHub 49573dd6b1 Feature/UI improvements (#770)
* catchup fixes

* feat(frontend): bookmarkable views via URL hash deep linking

Persist the active view to the URL hash so views are bookmarkable and
survive a page refresh. Restore the view from the hash on load, sync the
hash on navigation, and handle browser back/forward via a hashchange listener.

* feat(dev): add dev container for reproducible development

* feat(frontend): interactive multi-series metric sparklines on stats cards

* feat(frontend): aggregate status health banner with capacity breakdown

* feat(frontend): add guided empty states with hints

* chore(devcontainer): add gh CLI, dev tooling, cache volumes, and tasks

- Install GitHub CLI, git, build-essential, clang, lld, mold, jq
- Add cargo-watch, cargo-llvm-cov, cargo-deny, cargo-machete
- Persist cargo registry, target, and gh config via named volumes
- Fix volume ownership for the dev user in post-create

* chore(vscode): add tasks and launch configs for dev workflow

- tasks.json: backend/frontend dev servers, test, lint, fmt, coverage, deps checks, docs
- launch.json: CodeLLDB configs for backend and workspace tests

* a11y: add accessible labels to inputs and collapsed sidebar buttons

- Input: add aria_label prop, falling back to placeholder when no visible label
- Sidebar: pass translated hint + aria_label to collapsed-mode icon buttons

* feat(frontend): warn on unsaved config changes before page unload

* feat(frontend): handle session expiry with client-side logout

Schedule a client-side logout when the JWT expires, showing a
notification and returning the user to the login screen instead of
silently failing with 401s.

* chore(vscode): update tasks.json

* New Features

Session expiration detection with proactive logout warning
Real-time health status banner showing connectivity and provider status
Live metric sparklines for CPU, memory, and network usage
Deep-linkable views via URL hash with back/forward browser support
Enhanced empty states with guided messages across app sections

Improvements

Faster system metrics sampling (2-second intervals)
Archive and catchup-aware EPG handling for accurate program guides

* New Features

Session expiration detection with proactive logout warning
Real-time health status banner showing connectivity and provider status
Live metric sparklines for CPU, memory, and network usage
Deep-linkable views via URL hash with back/forward browser support
Enhanced empty states with guided messages across app sections

Improvements

Faster system metrics sampling (2-second intervals)
Archive and catchup-aware EPG handling for accurate program guides
2026-06-04 18:00:37 +02:00
euzu 8e5701b6d3 ci: bump version v3.3.45 v3.3.45 2026-06-02 09:17:18 +00:00
euzuandGitHub 4e82330c6a Fix/code duplicates and UI improvements (#769)
* feat(ui): toast progress bar, pause-on-hover, and copy-details for errors

Add a countdown progress bar to auto-dismiss toasts, pause both the timer and bar on hover (resuming with remaining time), and a 'copy details' action on error toasts. Respects prefers-reduced-motion.

* feat(ui): confirm destructive download/recording cancel and remove

Route the download/recording cancel and remove actions through the shared ConfirmDialog (which focuses the safe Cancel button by default), matching the existing confirmation flow for user/target/RBAC deletes.

* feat(ui): runtime-discovered languages with manifest and RTL support

Load available UI languages at runtime from assets/i18n/index.json, add a toolbar language picker (shown when >1 language), persist the choice, and set document dir/lang for RTL languages such as Arabic.

* feat(ui): recoverable error boundary with per-view retry fallback

Add an ErrorBoundary component (context handle + use_error_boundary hook) that shows a recoverable fallback with a retry button instead of blanking a section. Wrap each main view and the API-user playlist individually so a failure in one view stays contained and the rest of the UI keeps working.

* fix(api): use async canonicalize in local file stream handler

Replace the blocking std path.canonicalize() in local_stream_response with tokio::fs::canonicalize().await so the async runtime is not blocked while resolving the local media file path.

* Add Escape-to-close keyboard support for popup menus

Popup menus now close on Escape in addition to outside mouse-down, improving keyboard accessibility.

* Use descriptive alt text for logo and channel logo images

Login and sidebar logo images now use the configured app title, and playlist channel logos use the channel title, improving screen-reader accessibility.

* Add explicit type=button to shared button primitives

IconButton and TextButton now render with type=button to prevent accidental form submission when used inside forms.

* Persist sidebar collapsed state and table page size

The sidebar collapsed/expanded state and the stream-history table page size are now saved to localStorage and restored on reload, matching the already-persisted theme preference.

* Debounce filter editor input parsing

The filter editor textarea no longer re-parses, previews, and emits the filter on every keystroke. The textarea stays responsive via an immediate value while parsing and change notifications are debounced (300ms).

* Show localized message in table empty state

Data/paged tables now render the No content label in their empty state instead of an icon with no text. Sticky headers were already present.

* feat(frontend): improve screen-reader support for sidebar and toasts

* fix(frontend): handle missing window gracefully in sidebar

* feat(frontend): cross-dissolve colors on theme switch

* feat(frontend): add card hover lift, button press feedback, animated chevrons

* Removed code duplicates
2026-06-02 11:16:03 +02:00
euzu 57cf99a941 ci: bump version v3.3.44 v3.3.44 2026-06-01 14:57:37 +00:00
euzuandGitHub 3591515187 Issue-766 m3u catchup (#768)
* Issue-766 m3u catchup
2026-06-01 16:56:05 +02:00
euzu 6a3f00277b ci: bump version v3.3.43 v3.3.43 2026-05-28 21:44:05 +00:00
euzuandGitHub 1900ca587f - Add tamper-proof provider resolve tokens for STRM links (#765)
- Add tamper-proof provider resolve tokens for STRM links
- Resolve provider:// URLs through a generic provider redirect API
- Allow STRM generation with either Xtream or M3U output
- Reject STRM-only targets because STRM needs a backing stream output
2026-05-28 23:41:40 +02:00
euzu 158e4f266b ci: bump version v3.3.42 v3.3.42 2026-05-28 16:01:34 +00:00
euzuandGitHub 4c5d966248 Reduce heap allocation (#764)
- Refactored PlaylistSource to avoid Box<dyn> whre possible
- Some other small heap allocation fixes
2026-05-28 17:58:41 +02:00
euzu 081e3fd94c ci: bump version v3.3.41 v3.3.41 2026-05-27 12:57:13 +00:00
euzuandGitHub cf914013d6 Fixed Playlist Record Dialog (#763)
* Fixed Playlist Record Dialog
2026-05-27 14:54:49 +02:00
euzu 5c4f20f39f ci: bump version v3.3.40 v3.3.40 2026-05-27 09:53:54 +00:00
euzuandGitHub e9cab84ca4 shared ghost stream problem fix (#762)
Bug Fixes

Improved stream subscription reliability through enhanced subscriber lifecycle management and proper resource cleanup.
Fixed idle connection handling to be more responsive and efficient.


Performance

Optimized burst buffer operations with improved chunk-read efficiency and reduced memory allocations.
Enhanced buffer eviction logic for better resource utilization.
2026-05-27 11:52:02 +02:00
euzu 3e893d3439 ci: bump version v3.3.39 v3.3.39 2026-05-14 20:44:10 +00:00
euzuandGitHub 1a7f2db080 reconnect refactor (#758)
* reconnect refactor
2026-05-14 22:43:05 +02:00
euzu 1766a5144b ci: bump version v3.3.38 v3.3.38 2026-05-13 07:02:31 +00:00
euzuandGitHub 3a9db8e0ac Fix: Session handling (#757)
Fix stream session problems
2026-05-13 09:01:26 +02:00
euzu efd95612f9 ci: bump version v3.3.37 v3.3.37 2026-05-11 17:28:23 +00:00
euzuandGitHub 523149d8ac Fix stream session problems (#756)
* Fix stream session problems
2026-05-11 19:27:04 +02:00
euzu 9afa72613c ci: bump version v3.3.36 v3.3.36 2026-05-11 12:42:06 +00:00
Juanjo PresaandGitHub a158b35091 feat: add media enrichment fact patch core (#752)
* feat: add media enrichment fact patch core
2026-05-11 14:41:01 +02:00
euzu ecc131f8a7 ci: bump version v3.3.35 v3.3.35 2026-05-11 11:39:45 +00:00
Juanjo PresaandGitHub 945308a65b feat: add Plex media-server catalog and playback baseline (#748)
* feat: add Plex media-server catalog baseline
* feat: add Plex media-server playback baseline
2026-05-11 13:38:06 +02:00
euzu 1e74c33c5c ci: bump version v3.3.34 v3.3.34 2026-05-07 18:10:16 +00:00
a63cbc043c feat: add media-server catalog facts foundation (#746)
* feat: add media-server catalog facts foundation
* feat: expand media-server catalog fact foundation
* chore: address media-server catalog review nits
* feat: materialize media-server series details
* chore: stabilize media-server orphan episode parent refs
* feat: serve media-server series info from target storage
* refactoring media server catalog

* refactoring media server catalog

* refactoring media server catalog

---------

Co-authored-by: euzu <euzu@proton.me>
2026-05-07 20:08:14 +02:00
euzu 11e7f775c8 ci: bump version v3.3.33 v3.3.33 2026-05-07 09:15:48 +00:00