diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c9d804a..742064f78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,6 +76,7 @@ - UserTable: Copy credentials to clipboard from user table - UserTable: Kick user action from streams table - UserTable: Auto-generated username/password for new proxy users +- Update process uses now streams for data processing. # 3.1.7 (2025-10-10) - Added Dark/Bright theme switch diff --git a/backend/src/model/xmltv.rs b/backend/src/model/xmltv.rs index 138bceb6b..1b6883b51 100644 --- a/backend/src/model/xmltv.rs +++ b/backend/src/model/xmltv.rs @@ -138,7 +138,6 @@ impl Epg { let inner = writer.get_mut(); inner.flush().await?; - inner.shutdown().await?; Ok(()) } diff --git a/backend/src/utils/network/request.rs b/backend/src/utils/network/request.rs index 6e3e14627..ccc5ae22d 100644 --- a/backend/src/utils/network/request.rs +++ b/backend/src/utils/network/request.rs @@ -158,16 +158,11 @@ pub async fn get_input_text_content_as_stream(client: &reqwest::Client, input: & if filepath.exists() { match get_local_file_content_as_stream(&filepath).await { Ok(content) => { - if persist_filepath.is_some() { - let tee_reader: DynReader = if let Some(path) = persist_filepath { - let tee = tee_dyn_reader(content, &path, Some(Arc::new(|size| { - debug_if_enabled!("Persisted {} bytes", human_readable_byte_size(size as u64)); - }))).await; - Box::pin(tee) - } else { - content - }; - Some(tee_reader) + if let Some(path) = persist_filepath { + let tee = tee_dyn_reader(content, &path, Some(Arc::new(|size| { + debug_if_enabled!("Persisted {} bytes", human_readable_byte_size(size as u64)); + }))).await; + Some(Box::pin(tee)) } else { Some(content) } diff --git a/shared/src/utils/serde_utils.rs b/shared/src/utils/serde_utils.rs index d795df04a..4e581de36 100644 --- a/shared/src/utils/serde_utils.rs +++ b/shared/src/utils/serde_utils.rs @@ -72,7 +72,7 @@ where let s = n.to_string(); match s.parse::() { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), // Fehler ignorieren, None zurückgeben + Err(_) => Ok(None), // Ignore parse errors, return None } } @@ -83,17 +83,21 @@ where return Ok(None); } - // find the number - let digits = s.chars() - .skip_while(|c| !c.is_ascii_digit()) - .take_while(|c| c.is_ascii_digit()) - .collect::(); - - if digits.is_empty() { + // find the number, preserving optional sign + let trimmed = s.trim_start_matches(|c: char| !c.is_ascii_digit() && c != '-' && c != '+'); + if trimmed.is_empty() { return Ok(None); } - match digits.parse::() { + let number_str = trimmed.chars() + .take_while(|c| c.is_ascii_digit() || (*c == '-' || *c == '+') && trimmed.starts_with(|x: char| x == '-' || x == '+')) + .collect::(); + + if number_str.is_empty() || number_str == "-" || number_str == "+" { + return Ok(None); + } + + match number_str.parse::() { Ok(v) => Ok(Some(v)), Err(_) => Ok(None), }