diff --git a/CHANGELOG.md b/CHANGELOG.md index c4f5b6770..96bd2376b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +# 3.3.0 (2025-11-xx) +- Avoid blocking the runtime when warming cache + # 3.2.0 (2025-11-14) - Added `name` attribute to Staged Input. - Real-time active provider connection monitoring (dashboard + websocket) @@ -7,7 +10,7 @@ - More robust connection-state and provider-handle management - Streamlined event notifications and provider-count reporting - Added configurable `reverse_proxy.resource_retry` (UI + server) to tune max attempts, base delay, and exponential backoff multiplier for proxied resources. -- Multi Strm outputs with same type is now allowed. +- Multi Strm outputs with same type is now allowed. - Added new mapper function `pad(text | number, number, char, optional position: "<" | ">" | "^")` - Added new mapper function `format` for simple in-text replacement like `format("Hello {}! Hello {}!", "Bob", "World")` - Added `reverse_proxy.stream.shared_burst_buffer_mb` to control shared-stream burst buffer size (default 12 MB). @@ -19,13 +22,13 @@ - Catchup stream fix cycling through multiple providers on play. - Custom streams fix and update webui stream info - Added TimeZone to `epg_timeshift: [-+]hh:mm or TimeZone`, example `Europe/Paris`, `America/New_York`, `-2:30`(-2h30m), `+0:15` (15m), `2` (2h), `:30` (30m), `:3` (3m) -If you use TimeZone the timeshift will change on Summer/Winter time if its applied in the TZ. + If you use TimeZone the timeshift will change on Summer/Winter time if its applied in the TZ. - Fixed: Mappings now automatically reload and reapply after configuration changes, preventing stale settings. - Search in Playlist Explorer now returns groups instead of matching flat channel list. - Added `use_memory_cache` attribute to target definition to hold playlist in memory to reduce disc access. -Placing playlist into memory causes more RAM usage but reduces disk access. -- Added optional `filter` attribute to Output (except HDHomerun-Output). -Output filters are applied after all transformations have been performed, therefore, all filter contents must refer to the final state of the playlist. + Placing playlist into memory causes more RAM usage but reduces disk access. +- Added optional `filter` attribute to Output (except HDHomerun-Output). + Output filters are applied after all transformations have been performed, therefore, all filter contents must refer to the final state of the playlist. - Added burst buffer to shared stream - Telegram message thread support. thread id can now be appended to chat-id like `chat-id:thread-id`. - Telegram supports markdown generation for structured json messages. simply set `markdown: true` in telegram config. @@ -43,7 +46,7 @@ Output filters are applied after all transformations have been performed, theref # 3.1.7 (2025-10-10) - Added Dark/Bright theme switch - Resource proxy retries failed requests up to three times and respects the `Retry-After` header (falls back to 100 ms wait) -to reduce transient HTTP errors (400, 408, 425, 429, 5xx) + to reduce transient HTTP errors (400, 408, 425, 429, 5xx) - Added `accept_insecure_ssl_certificates` option in `config.yml` (for serving images over HTTPS without a valid SSL certificate) - VOD streams now use tmdbid from `get_vod_streams` if available, removing the need for `resolve_vod` in STRM generation - Fixed file length issue in STRM generation @@ -63,14 +66,14 @@ to reduce transient HTTP errors (400, 408, 425, 429, 5xx) - Fixed auto EPG for batch inputs - Fixed EPG URL prepare - Content Security Policies configurable via config, default OFF -- WebUI Config View editor for config.yml added +- WebUI Config View editor for config.yml added # 3.1.5 (2025-08-14) - Hot reload for config - New WebUI (currently only readonly) - Fixed shared stream provider connection count - Added hanging client connection release -- Added `replace` built-in function for mapper scripts +- Added `replace` built-in function for mapper scripts - Added `token_ttl_mins` to web_auth config to define auth token expiration duration. - Staged sources. Side-loading playlist. Load from staged, serve from provider. - Fixed proxy config @@ -87,7 +90,7 @@ to reduce transient HTTP errors (400, 408, 425, 429, 5xx) ``` station_prefix = template(concat("US_", station, "_PREFIX")), ``` -If we assume the variable `station` contains the value `WINK`, +If we assume the variable `station` contains the value `WINK`, this script receives the template with the concatenated name `US_WINK_PREFIX` which should be defined in `templates` section, and assigns it to the variable `station_prefix`. - Extended STRM export functionality with: diff --git a/Cargo.lock b/Cargo.lock index e0b020e01..af3a6b4f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1102,7 +1102,7 @@ dependencies = [ [[package]] name = "frontend" -version = "3.2.0" +version = "3.2.1" dependencies = [ "anyhow", "base64", @@ -3782,7 +3782,7 @@ dependencies = [ [[package]] name = "shared" -version = "3.2.0" +version = "3.2.1" dependencies = [ "base64", "bitflags 2.10.0", @@ -4331,7 +4331,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tuliprox" -version = "3.2.0" +version = "3.2.1" dependencies = [ "arc-swap", "async-compression", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 730506f06..8e8b975de 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tuliprox" -version = "3.2.0" +version = "3.2.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/backend/src/api/model/app_state.rs b/backend/src/api/model/app_state.rs index 7287862d7..d4bb28321 100644 --- a/backend/src/api/model/app_state.rs +++ b/backend/src/api/model/app_state.rs @@ -20,6 +20,7 @@ use std::sync::atomic::AtomicI8; use std::sync::Arc; use std::time::Duration; use tokio::sync::Mutex; +use tokio::task; use tokio_util::sync::CancellationToken; use crate::repository::storage::get_geoip_path; use crate::utils::GeoIp; @@ -210,8 +211,11 @@ pub fn create_cache(config: &Config) -> Option>> { let cache = Arc::new(Mutex::new(res_cache)); let cache_scanner = Arc::clone(&cache); tokio::spawn(async move { - let mut c = cache_scanner.lock().await; - if let Err(err) = (*c).scan() { + let scan_result = { + let mut cache = cache_scanner.lock().await; + task::block_in_place(|| cache.scan()) + }; + if let Err(err) = scan_result { error!("Failed to scan cache {err}"); } }); @@ -485,4 +489,4 @@ pub struct HdHomerunAppState { pub app_state: Arc, pub device: Arc, pub hd_scan_state: Arc, -} \ No newline at end of file +} diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml index 95d800f41..18bf0722c 100644 --- a/frontend/Cargo.toml +++ b/frontend/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "frontend" -version = "3.2.0" +version = "3.2.1" edition = "2021" [dependencies] -shared = { version = "3.2.0", path = "../shared" } +shared = { version = "3.2.1", path = "../shared" } chrono = "0" yew = "0.21" yew-router = "0.18" diff --git a/shared/Cargo.toml b/shared/Cargo.toml index 8b2f7a4e9..e94bc1039 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shared" -version = "3.2.0" +version = "3.2.1" edition = "2021" [dependencies]