Commit Graph
27 Commits
Author SHA1 Message Date
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
knylbyteandGitHub b51fc105a4 feat: pipe remote ffprobe probes through reqwest (#730)
pipe remote ffprobe probes through reqwest
2026-04-24 09:59:06 +02:00
knylbyteandGitHub ae4c6d988f fix: resolve provider urls before probing (#726)
* fix: resolve provider urls before probing
* fix: avoid live probe url allocation
2026-04-23 07:26:23 +02:00
euzuandGitHub 31a48bc1f3 Feature/structured errors landing page (#705)
- structured errors
- landing page
- fix: table header background
2026-04-06 10:20:52 +02:00
euzuandGitHub bb82798457 Fix/local series episodes (#681)
* Local and provider series uuid generation fixed.
* fixed some local media issues
2026-03-29 15:13:00 +02:00
euzuandGitHub 9d35a9cbbe Sorce ordinal by category and channel index (#672)
* Sorce ordinal by category and channel index
* Parsing UserApiRequest from request body or query
* CSS stylings
* media tools refactoring
* xtream info parsing now number/string fields
2026-03-27 15:23:39 +01:00
euzuandGitHub 737d04d08b Feature/staged input and path improvements (#632)
* No template file not found error message
* Setup wizard improvmenets
* path improvements
* staged input fix
* path improvements
* Provider dns resolved ips now writing to a file instead of source.yml
* Playlist update hard kill after 1h
* matadata update tmdb fix
* Web UI fixes
* GeoIp update schedule
* batch:// prefix  for aliases
2026-03-06 17:29:42 +01:00
euzuandGitHub 36dcd0ff12 rewrite resource urls for webui (#629)
* rewrite resource urls for webui
* fix for dbviewer
* added metadata update new field
2026-03-05 00:04:53 +01:00
knylbyteandGitHub f8ae4c9d56 fix: use manual redirects only for http proxies and apply proxy setting to ffprobe subprocess (#612)
* fix: use manual redirects only for http proxies
* fix: sync panel api on manual playlist update
* fix: route ffprobe probes through configured proxy
* fix: handle non-unicode proxy env vars safely
* fix: serialize panel api sync and align sync naming
* fix: manually follow hls redirects when proxy is configured
* fix: align hls manual redirect with proxy scheme
* fix: emit playlist update failure when lock is closed
* fix: align probe and scheduler paths for upstream merge
* fix: remove playlist lock retry and name hls redirect limit
2026-02-26 20:36:01 +01:00
euzuandGitHub 96a5512b65 TMDB retry fixed and added cooldown. (#613)
New Features

Background probing for Live streams with configurable interval; new input options to trigger probing and toggle background resolution.
Configuration Changes

metadata_update reorganized into grouped sections: log, resolve, probe, ffprobe, tmdb.
FFprobe controls moved under ffprobe.* and now require explicit time/size units; new live ffprobe settings.
Added metadata_update.tmdb.cooldown (default 7d) and grouped TMDB settings.
Bug Fixes

TMDB no-match cooldown to prevent endless requeues.
Documentation

README and UI help updated to reflect grouped metadata_update fields and explanations.
2026-02-26 14:41:02 +01:00
euzuandGitHub 3be0fa347f MetadatResolve hardening rerties after errors (#611)
* MetadatResolve hardening rerties after errors
2026-02-25 19:30:19 +01:00
euzuandGitHub 815487e4f5 Fix/peristed m3u file invalid provider url (#595)
Fixed m3u playlist with  provider_config persistence as text file
Added probe_delay input option (default 2s); stream probing renamed “Stream Probing” and now covers live, VOD and series as a low‑priority background task.
2026-02-18 08:18:28 +01:00
euzuandGitHub 7b8bdaa49b Feature/stream probe (#585)
Stream probe
2026-02-14 17:52:35 +01:00
euzuandGitHub fc0f1f32aa Enhanced Metadata Resolution, Stream Analysis & Improved STRM-Output. Added connection priority management.
**Description:**
This PR introduces a major overhaul of how streams are analyzed and connections are managed. It integrates `ffprobe` for deep stream analysis, adds a background task queue for metadata resolution to prevent UI blocking, introduces a connection priority system, and adds support for Live TV probing.

### 🚀 Key Features

*   **FFprobe Integration & Live TV Probing**:
    *   Automatically probes streams (VOD/Series **and now Live TV**) to determine resolution, codecs (HEVC/AV1), dynamic range (HDR/DV), bit depth, and audio channels.
    *   **Safe Probing**: Probing strictly respects the provider's `max_connections` limit.
    *   Docker images now include static `ffmpeg/ffprobe` binaries.

*   **Smart Connection Management (Priority System)**:
    *   Introduced a priority system for connections to manage provider limits intelligently.
    *   **Preemption**: Users with higher priority can preempt (kick) lower priority connections when provider slots are full.
    *   **Background Queue**: Metadata resolution and stream analysis run as background tasks (Priority 0). They only run when connection slots are idle and yield immediately if a real user needs to stream.

*   **Enhanced Metadata Resolution**:
    *   **Fallback Logic**: If a provider is missing the TMDB ID or Release Date, the system resolves them via the TMDB API.
    *   **Smart Title Cleaning**: Implemented a centralized cleaner to strip common IPTV prefixes before attempting metadata matches or generating filenames, significantly improving match rates.

*   **Improved Output**:
    *   **Quality Tags**: Filenames in STRM files now include detailed tags (e.g., `Movie - [4K HEVC HDR].strm`).
    *   **Flat Grouping**: `flat: true` now correctly groups multi-version movies into single folders based on TMDB ID.
    *   **Global Series Date**: Ensures consistent series folder naming even if episodes have different years.
2026-02-12 15:06:57 +01:00
euzu ccdbf1dfce Retry request from reverseproxy retry options 2026-01-22 13:30:59 +01:00
euzuandGitHub cc2e50549d Feature/panel api update (#524)
Panel Api update
2026-01-20 18:51:46 +01:00
euzu 8cc9283a31 Playlist Update Optimization: Reduced Memory Usage
An optimization has been introduced to reduce memory consumption during playlist updates.

Overview
Previously, provider playlists were fully loaded into memory during the update process. For large playlists (e.g. hundreds of thousands of entries or multiple providers), this could result in significant RAM usage.
With the new implementation, it is now possible to optionally read provider playlists directly from disk instead of keeping them entirely in memory.

How It Works
 - users can configure whether:
     - Provider playlists are loaded into memory (previous behavior), or
     - Provider playlists are streamed to/from disk to minimize RAM usage.

Processing remains sequential and batch-based, ensuring identical functional behavior.
This approach significantly lowers peak memory usage, especially on systems with limited resources.

Benefits

- Reduced peak RAM consumption during playlist updates
- Better scalability for large playlists and multiple providers
- Full backward compatibility

Trade-offs / Drawbacks

 - Increased processing time due to reduced in-memory caching
 - Higher disk I/O usage, especially for large or fragmented playlists
 - Performance depends more strongly on disk speed (Nvme SSD, HDD)
 - Slightly increased CPU overhead due to repeated parsing and deserialization
 - Not optimal for environments where fast updates are more important than memory usage

Recommendation

 - Use in-memory mode for systems with sufficient RAM and a focus on update speed
 - Use disk-based mode for large playlists, multiple providers, or memory-constrained environments
2026-01-08 15:11:12 +01:00
euzu d5207e886f stream properties refactored 2025-12-26 14:09:44 +01:00
euzu c7bc0beb96 stream properties refactored 2025-12-22 17:33:18 +01:00
euzu 8021d06435 refactored resolve vod/series functions 2025-12-17 09:11:45 +01:00
euzu 55191d6c84 vod resolve refactored
Arc<Client> is now Client
2025-12-11 09:54:28 +01:00
euzu c6203190e0 File Lock fix 2025-11-14 09:49:48 +01:00
euzu bd052562b9 web ui config pages 2025-08-13 23:07:21 +02:00
euzu 346478b260 Staged input 2025-08-13 13:40:41 +02:00
euzu c292f0b73e config refactor 2025-06-24 11:25:42 +02:00
euzu 7f54327bfd config added to shared model 2025-06-19 16:37:37 +02:00
euzu 2a9c8711e6 project shared added 2025-06-19 12:45:55 +02:00