From eaf84f5720d4ca7a6867e4a00a9de80e9dff80b1 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Thu, 4 Apr 2024 16:45:31 +0200 Subject: [PATCH 1/8] user define ignore errors, fix #577 --- Cargo.lock | 102 +++++++++++++-------------- assets/ffplayout.yml | 8 +++ ffplayout-engine/src/input/ingest.rs | 8 ++- ffplayout-engine/src/output/hls.rs | 3 +- ffplayout-engine/src/output/mod.rs | 7 +- lib/src/utils/config.rs | 1 + lib/src/utils/json_validate.rs | 5 ++ lib/src/utils/mod.rs | 5 +- 8 files changed, 82 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6459b6d..6891c85c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -126,7 +126,7 @@ dependencies = [ "parse-size", "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -239,14 +239,14 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] name = "actix-web-grants" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5941a5bdf4cc022ca7721dae70d9818d7b13f93040b0543cb901410c8d3172" +checksum = "9793f592921b44112da3d82f7a6d5e0867cb0b1a7c11c304138bff95f92a5725" dependencies = [ "actix-web", "protect-endpoints-proc-macro", @@ -453,16 +453,16 @@ checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" dependencies = [ "concurrent-queue", "event-listener 5.2.0", - "event-listener-strategy 0.5.0", + "event-listener-strategy 0.5.1", "futures-core", "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.8.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +checksum = "10b3e585719c2358d2660232671ca8ca4ddb4be4ce8a1842d6c2dc8685303316" dependencies = [ "async-lock 3.3.0", "async-task", @@ -587,7 +587,7 @@ checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -782,9 +782,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.35" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ "android-tzdata", "iana-time-zone", @@ -842,7 +842,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -1002,7 +1002,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -1013,7 +1013,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -1031,9 +1031,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", "pem-rfc7468", @@ -1091,9 +1091,9 @@ dependencies = [ [[package]] name = "email-encoding" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87260449b06739ee78d6281c68d2a0ff3e3af64a78df63d3a1aeb3c06997c8a" +checksum = "60d1d33cdaede7e24091f039632eb5d3c7469fe5b066a985281a34fc70fa317f" dependencies = [ "base64 0.22.0", "memchr", @@ -1181,9 +1181,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" dependencies = [ "event-listener 5.2.0", "pin-project-lite", @@ -1491,7 +1491,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -1971,9 +1971,9 @@ dependencies = [ [[package]] name = "lettre" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8305b122b8ccc64e437b0de101851f9f00aade5886246e85f341c1d9a15a91b7" +checksum = "47460276655930189e0919e4fbf46e46476b14f934f18a63dd726a5fb7b60e2e" dependencies = [ "base64 0.22.0", "chumsky", @@ -2098,9 +2098,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "mime" @@ -2440,14 +2440,14 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -2547,14 +2547,14 @@ dependencies = [ [[package]] name = "protect-endpoints-proc-macro" -version = "0.1.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfff647917bb00f5e9c57a5c15d95db74db5387139ac03052358e38462c86a76" +checksum = "252ec626765a872f3a6d462581c4781549a2a2f6f9d4d8a789ad40f5db3c0c74" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -2865,9 +2865,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "868e20fada228fefaf6b652e00cc73623d54f8171e7352c18bb281571f2d92da" +checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" [[package]] name = "rustls-webpki" @@ -2934,7 +2934,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -3004,7 +3004,7 @@ checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -3414,9 +3414,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.55" +version = "2.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0" +checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" dependencies = [ "proc-macro2", "quote", @@ -3507,7 +3507,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -3572,9 +3572,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" dependencies = [ "backtrace", "bytes", @@ -3597,7 +3597,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -3684,7 +3684,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -3876,7 +3876,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", "wasm-bindgen-shared", ] @@ -3910,7 +3910,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4159,7 +4159,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.55", + "syn 2.0.57", ] [[package]] @@ -4196,27 +4196,27 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" +checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.0.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" +checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.9+zstd.1.5.5" +version = "2.0.10+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" dependencies = [ "cc", "pkg-config", diff --git a/assets/ffplayout.yml b/assets/ffplayout.yml index 08e4b9f1..0c264f8b 100644 --- a/assets/ffplayout.yml +++ b/assets/ffplayout.yml @@ -37,6 +37,8 @@ logging: 'ffmpeg_level/ingest_level' can be info, warning, error. 'detect_silence' logs an error message if the audio line is silent for 15 seconds during the validation process. + 'ignore_lines' makes logging to ignore strings that contains matched lines, + in frontend is a semicolon separated list. log_to_file: true backup_count: 7 local_time: true @@ -46,6 +48,12 @@ logging: ffmpeg_level: error ingest_level: warning detect_silence: false + ignore_lines: + - P sub_mb_type 4 out of range at + - error while decoding MB + - negative number of zero coeffs at + - out of range intra chroma pred mode + - non-existing SPS 0 referenced in buffering period processing: help_text: Default processing for all clips, to have them unique. Mode can be playlist diff --git a/ffplayout-engine/src/input/ingest.rs b/ffplayout-engine/src/input/ingest.rs index c2db4c4e..9cca52e0 100644 --- a/ffplayout-engine/src/input/ingest.rs +++ b/ffplayout-engine/src/input/ingest.rs @@ -19,13 +19,16 @@ use ffplayout_lib::{ fn server_monitor( level: &str, + ignore: Vec, buffer: BufReader, proc_ctl: ProcessControl, ) -> Result<(), Error> { for line in buffer.lines() { let line = line?; - if !FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) { + if !FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) + && !ignore.iter().any(|i| line.contains(&*i)) + { log_line(&line, level); } @@ -95,6 +98,7 @@ pub fn ingest_server( while !proc_control.is_terminated.load(Ordering::SeqCst) { let proc_ctl = proc_control.clone(); let level = config.logging.ingest_level.clone().unwrap(); + let ignore = config.logging.ignore_lines.clone(); let mut server_proc = match Command::new("ffmpeg") .args(server_cmd.clone()) .stdout(Stdio::piped()) @@ -110,7 +114,7 @@ pub fn ingest_server( let mut ingest_reader = BufReader::new(server_proc.stdout.take().unwrap()); let server_err = BufReader::new(server_proc.stderr.take().unwrap()); let error_reader_thread = - thread::spawn(move || server_monitor(&level, server_err, proc_ctl)); + thread::spawn(move || server_monitor(&level, ignore, server_err, proc_ctl)); *proc_control.server_term.lock().unwrap() = Some(server_proc); is_running = false; diff --git a/ffplayout-engine/src/output/hls.rs b/ffplayout-engine/src/output/hls.rs index ccf9464c..c33648f6 100644 --- a/ffplayout-engine/src/output/hls.rs +++ b/ffplayout-engine/src/output/hls.rs @@ -166,6 +166,7 @@ pub fn write_hls( for node in get_source { *player_control.current_media.lock().unwrap() = Some(node.clone()); + let ignore = config.logging.ignore_lines.clone(); let mut cmd = match &node.cmd { Some(cmd) => cmd.clone(), @@ -247,7 +248,7 @@ pub fn write_hls( let enc_err = BufReader::new(dec_proc.stderr.take().unwrap()); *proc_control.decoder_term.lock().unwrap() = Some(dec_proc); - if let Err(e) = stderr_reader(enc_err, Decoder, proc_control.clone()) { + if let Err(e) = stderr_reader(enc_err, ignore, Decoder, proc_control.clone()) { error!("{e:?}") }; diff --git a/ffplayout-engine/src/output/mod.rs b/ffplayout-engine/src/output/mod.rs index 6fe25df3..d8fa0723 100644 --- a/ffplayout-engine/src/output/mod.rs +++ b/ffplayout-engine/src/output/mod.rs @@ -45,6 +45,7 @@ pub fn player( ) { let config_clone = config.clone(); let ff_log_format = format!("level+{}", config.logging.ffmpeg_level.to_lowercase()); + let ignore_enc = config.logging.ignore_lines.clone(); let mut buffer = [0; 65088]; let mut live_on = false; let playlist_init = playout_stat.list_init.clone(); @@ -73,7 +74,8 @@ pub fn player( let enc_p_ctl = proc_control.clone(); // spawn a thread to log ffmpeg output error messages - let error_encoder_thread = thread::spawn(move || stderr_reader(enc_err, Encoder, enc_p_ctl)); + let error_encoder_thread = + thread::spawn(move || stderr_reader(enc_err, ignore_enc, Encoder, enc_p_ctl)); let proc_control_c = proc_control.clone(); let mut ingest_receiver = None; @@ -87,6 +89,7 @@ pub fn player( 'source_iter: for node in node_sources { *play_control.current_media.lock().unwrap() = Some(node.clone()); + let ignore_dec = config.logging.ignore_lines.clone(); if proc_control.is_terminated.load(Ordering::SeqCst) { debug!("Playout is terminated, break out from source loop"); @@ -185,7 +188,7 @@ pub fn player( let dec_p_ctl = proc_control.clone(); let error_decoder_thread = - thread::spawn(move || stderr_reader(dec_err, Decoder, dec_p_ctl)); + thread::spawn(move || stderr_reader(dec_err, ignore_dec, Decoder, dec_p_ctl)); loop { // when server is running, read from it diff --git a/lib/src/utils/config.rs b/lib/src/utils/config.rs index 7eb0aa92..1361899e 100644 --- a/lib/src/utils/config.rs +++ b/lib/src/utils/config.rs @@ -229,6 +229,7 @@ pub struct Logging { pub ingest_level: Option, #[serde(default)] pub detect_silence: bool, + pub ignore_lines: Vec, } #[derive(Debug, Serialize, Deserialize, Clone)] diff --git a/lib/src/utils/json_validate.rs b/lib/src/utils/json_validate.rs index 627148bb..05bdb662 100644 --- a/lib/src/utils/json_validate.rs +++ b/lib/src/utils/json_validate.rs @@ -95,6 +95,11 @@ fn check_media( let line = line?; if !FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) + && !config + .logging + .ignore_lines + .iter() + .any(|i| line.contains(&*i)) && (line.contains("[error]") || line.contains("[fatal]")) { let log_line = line.replace("[error] ", "").replace("[fatal] ", ""); diff --git a/lib/src/utils/mod.rs b/lib/src/utils/mod.rs index e8012be7..41129c32 100644 --- a/lib/src/utils/mod.rs +++ b/lib/src/utils/mod.rs @@ -682,13 +682,16 @@ pub fn include_file_extension(config: &PlayoutConfig, file_path: &Path) -> bool /// and log the output. pub fn stderr_reader( buffer: BufReader, + ignore: Vec, suffix: ProcessUnit, proc_control: ProcessControl, ) -> Result<(), Error> { for line in buffer.lines() { let line = line?; - if FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) { + if FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) + || ignore.iter().any(|i| line.contains(&*i)) + { continue; } From 77f68b3a4690b848cdea0ee599dc92690712d638 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Thu, 4 Apr 2024 16:46:26 +0200 Subject: [PATCH 2/8] ignore error lines --- ffplayout-frontend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffplayout-frontend b/ffplayout-frontend index 3802e75c..073d9dcb 160000 --- a/ffplayout-frontend +++ b/ffplayout-frontend @@ -1 +1 @@ -Subproject commit 3802e75c461eeea0febf20c1ea2c97cb89dd8d41 +Subproject commit 073d9dcba0de0ec9eb2175e72c8b31ce9cad004c From 8dcd3603c1125c25f1e0693583cd9af2ad7ab390 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Sun, 7 Apr 2024 16:05:33 +0200 Subject: [PATCH 3/8] add default --- lib/src/utils/config.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/src/utils/config.rs b/lib/src/utils/config.rs index 1361899e..997b7286 100644 --- a/lib/src/utils/config.rs +++ b/lib/src/utils/config.rs @@ -229,6 +229,7 @@ pub struct Logging { pub ingest_level: Option, #[serde(default)] pub detect_silence: bool, + #[serde(default)] pub ignore_lines: Vec, } From 498f4b27d074777d801d5b2ca5290ad3e1ca186d Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Sun, 7 Apr 2024 23:29:10 +0200 Subject: [PATCH 4/8] implement file move, fix #440 --- ffplayout-api/src/utils/files.rs | 171 ++++++++++++++++++++----------- 1 file changed, 113 insertions(+), 58 deletions(-) diff --git a/ffplayout-api/src/utils/files.rs b/ffplayout-api/src/utils/files.rs index bf9963d0..0cdcdbe1 100644 --- a/ffplayout-api/src/utils/files.rs +++ b/ffplayout-api/src/utils/files.rs @@ -1,5 +1,4 @@ use std::{ - fs, io::Write, path::{Path, PathBuf}, }; @@ -12,6 +11,7 @@ use rand::{distributions::Alphanumeric, Rng}; use relative_path::RelativePath; use serde::{Deserialize, Serialize}; use sqlx::{Pool, Sqlite}; +use tokio::fs; use simplelog::*; @@ -22,6 +22,7 @@ use ffplayout_lib::utils::{file_extension, MediaProbe}; pub struct PathObject { pub source: String, parent: Option, + parent_folders: Option>, folders: Option>, files: Option>, #[serde(default)] @@ -33,6 +34,7 @@ impl PathObject { Self { source, parent, + parent_folders: Some(vec![]), folders: Some(vec![]), files: Some(vec![]), folders_only: false, @@ -108,59 +110,98 @@ pub async fn browser( .split(',') .map(|e| e.to_string()) .collect::>(); + let mut parent_folders = vec![]; let mut extensions = config.storage.extensions; extensions.append(&mut channel_extensions); let (path, parent, path_component) = norm_abs_path(&config.storage.path, &path_obj.source); + + let parent_path = if !path_component.is_empty() { + path.parent().unwrap() + } else { + &config.storage.path + }; + let mut obj = PathObject::new(path_component, Some(parent)); obj.folders_only = path_obj.folders_only; - let mut paths: Vec = match fs::read_dir(path) { - Ok(p) => p.filter_map(|r| r.ok()).map(|p| p.path()).collect(), - Err(e) => { - error!("{e} in {}", path_obj.source); - return Err(ServiceError::NoContent(e.to_string())); - } - }; + if path != parent_path && !path_obj.folders_only { + let mut parents = fs::read_dir(&parent_path).await?; + + while let Some(child) = parents.next_entry().await? { + if child.metadata().await?.is_dir() { + parent_folders.push( + child + .path() + .file_name() + .unwrap() + .to_string_lossy() + .to_string(), + ); + } + } + + parent_folders.path_sort(natural_lexical_cmp); + + obj.parent_folders = Some(parent_folders); + } + + let mut paths_obj = fs::read_dir(path).await?; - paths.path_sort(natural_lexical_cmp); let mut files = vec![]; let mut folders = vec![]; - for path in paths { + while let Some(child) = paths_obj.next_entry().await? { + let f_meta = child.metadata().await?; + // ignore hidden files/folders on unix - if path.display().to_string().contains("/.") { + if child.path().to_string_lossy().to_string().contains("/.") { continue; } - if path.is_dir() { - folders.push(path.file_name().unwrap().to_string_lossy().to_string()); - } else if path.is_file() && !path_obj.folders_only { - if let Some(ext) = file_extension(&path) { + if f_meta.is_dir() { + folders.push( + child + .path() + .file_name() + .unwrap() + .to_string_lossy() + .to_string(), + ); + } else if f_meta.is_file() && !path_obj.folders_only { + if let Some(ext) = file_extension(&child.path()) { if extensions.contains(&ext.to_string().to_lowercase()) { - match MediaProbe::new(&path.display().to_string()) { - Ok(probe) => { - let mut duration = 0.0; - - if let Some(dur) = probe.format.duration { - duration = dur.parse().unwrap_or_default() - } - - let video = VideoFile { - name: path.file_name().unwrap().to_string_lossy().to_string(), - duration, - }; - files.push(video); - } - Err(e) => error!("{e:?}"), - }; + files.push(child.path()) } } } } + folders.path_sort(natural_lexical_cmp); + files.path_sort(natural_lexical_cmp); + let mut media_files = vec![]; + + for file in files { + match MediaProbe::new(&file.to_string_lossy().to_string()) { + Ok(probe) => { + let mut duration = 0.0; + + if let Some(dur) = probe.format.duration { + duration = dur.parse().unwrap_or_default() + } + + let video = VideoFile { + name: file.file_name().unwrap().to_string_lossy().to_string(), + duration, + }; + media_files.push(video); + } + Err(e) => error!("{e:?}"), + }; + } + obj.folders = Some(folders); - obj.files = Some(files); + obj.files = Some(media_files); Ok(obj) } @@ -173,36 +214,50 @@ pub async fn create_directory( let (config, _) = playout_config(conn, &id).await?; let (path, _, _) = norm_abs_path(&config.storage.path, &path_obj.source); - if let Err(e) = fs::create_dir_all(&path) { + if let Err(e) = fs::create_dir_all(&path).await { return Err(ServiceError::BadRequest(e.to_string())); } - info!("create folder: {}", path.display()); + info!( + "create folder: {}", + path.to_string_lossy() + ); Ok(HttpResponse::Ok().into()) } -// fn copy_and_delete(source: &PathBuf, target: &PathBuf) -> Result { -// match fs::copy(&source, &target) { -// Ok(_) => { -// if let Err(e) = fs::remove_file(source) { -// error!("{e}"); -// return Err(ServiceError::BadRequest( -// "Removing File not possible!".into(), -// )); -// }; +async fn copy_and_delete(source: &PathBuf, target: &PathBuf) -> Result { + match fs::copy(&source, &target).await { + Ok(_) => { + if let Err(e) = fs::remove_file(source).await { + error!("{e}"); + return Err(ServiceError::BadRequest( + "Removing File not possible!".into(), + )); + }; -// return Ok(PathObject::new(target.display().to_string())); -// } -// Err(e) => { -// error!("{e}"); -// Err(ServiceError::BadRequest("Error in file copy!".into())) -// } -// } -// } + return Ok(MoveObject { + source: source + .file_name() + .unwrap_or_default() + .to_string_lossy() + .to_string(), + target: target + .file_name() + .unwrap_or_default() + .to_string_lossy() + .to_string(), + }); + } + Err(e) => { + error!("{e}"); + Err(ServiceError::BadRequest("Error in file copy!".into())) + } + } +} -fn rename(source: &PathBuf, target: &PathBuf) -> Result { - match fs::rename(source, target) { +async fn rename(source: &PathBuf, target: &PathBuf) -> Result { + match fs::rename(source, target).await { Ok(_) => Ok(MoveObject { source: source .file_name() @@ -217,7 +272,7 @@ fn rename(source: &PathBuf, target: &PathBuf) -> Result { error!("{e}"); - Err(ServiceError::BadRequest("Rename failed!".into())) + copy_and_delete(source, target).await } } } @@ -237,7 +292,7 @@ pub async fn rename_file( if (source_path.is_dir() || source_path.is_file()) && source_path.parent() == Some(&target_path) { - return rename(&source_path, &target_path); + return rename(&source_path, &target_path).await; } if target_path.is_dir() { @@ -251,7 +306,7 @@ pub async fn rename_file( } if source_path.is_file() && target_path.parent().is_some() { - return rename(&source_path, &target_path); + return rename(&source_path, &target_path).await; } Err(ServiceError::InternalServerError) @@ -270,7 +325,7 @@ pub async fn remove_file_or_folder( } if source.is_dir() { - match fs::remove_dir(source) { + match fs::remove_dir(source).await { Ok(_) => return Ok(()), Err(e) => { error!("{e}"); @@ -282,7 +337,7 @@ pub async fn remove_file_or_folder( } if source.is_file() { - match fs::remove_file(source) { + match fs::remove_file(source).await { Ok(_) => return Ok(()), Err(e) => { error!("{e}"); From d46a49e118cb9654d27e18c771c69b598dba913a Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Tue, 9 Apr 2024 16:36:32 +0200 Subject: [PATCH 5/8] migrate to tailwind --- ffplayout-frontend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffplayout-frontend b/ffplayout-frontend index 073d9dcb..601f2c80 160000 --- a/ffplayout-frontend +++ b/ffplayout-frontend @@ -1 +1 @@ -Subproject commit 073d9dcba0de0ec9eb2175e72c8b31ce9cad004c +Subproject commit 601f2c8022233bfdf6bf145c36f51ee62a827e2b From 0131fc615992d3d17efc8757ac63977f1bfd9832 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Tue, 9 Apr 2024 16:40:14 +0200 Subject: [PATCH 6/8] update packages --- Cargo.lock | 121 ++++++++++++++++++++++------------------------- lib/Cargo.toml | 2 +- tests/Cargo.toml | 2 +- 3 files changed, 58 insertions(+), 67 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6891c85c..b11ddbc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -126,7 +126,7 @@ dependencies = [ "parse-size", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -239,7 +239,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -452,7 +452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" dependencies = [ "concurrent-queue", - "event-listener 5.2.0", + "event-listener 5.3.0", "event-listener-strategy 0.5.1", "futures-core", "pin-project-lite", @@ -460,9 +460,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b3e585719c2358d2660232671ca8ca4ddb4be4ce8a1842d6c2dc8685303316" +checksum = "5f98c37cf288e302c16ef6c8472aad1e034c6c84ce5ea7b8101c98eb4a802fee" dependencies = [ "async-lock 3.3.0", "async-task", @@ -587,7 +587,7 @@ checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -729,9 +729,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.15.4" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" @@ -756,9 +756,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.90" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" +checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" dependencies = [ "jobserver", "libc", @@ -830,7 +830,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.0", + "strsim 0.11.1", ] [[package]] @@ -842,7 +842,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -906,9 +906,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.0.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" dependencies = [ "crc-catalog", ] @@ -1002,7 +1002,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -1013,7 +1013,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -1160,9 +1160,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" dependencies = [ "concurrent-queue", "parking", @@ -1185,7 +1185,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" dependencies = [ - "event-listener 5.2.0", + "event-listener 5.3.0", "pin-project-lite", ] @@ -1306,9 +1306,9 @@ dependencies = [ [[package]] name = "ffprobe" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5d603974ab029fc75cebf00bfa06c9c6f49a6fb657f4f5f6a9fd6cbd76910a4" +checksum = "8ffef835e1f9ac151db5bb2adbb95c9dfe1f315f987f011dd89cd655b4e9a52c" dependencies = [ "serde", "serde_json", @@ -1491,7 +1491,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -1536,9 +1536,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", "js-sys", @@ -1573,9 +1573,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -1987,7 +1987,7 @@ dependencies = [ "percent-encoding", "quoted_printable", "rustls 0.23.4", - "rustls-pemfile 2.1.1", + "rustls-pemfile", "socket2 0.5.6", "tokio", "url", @@ -2400,11 +2400,11 @@ checksum = "498a099351efa4becc6a19c72aa9270598e8fd274ca47052e37455241c88b696" [[package]] name = "pem" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "base64 0.21.7", + "base64 0.22.0", "serde", ] @@ -2440,7 +2440,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -2554,7 +2554,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -2677,11 +2677,11 @@ checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc" [[package]] name = "reqwest" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d66674f2b6fb864665eea7a3c1ac4e3dfacd2fda83cf6f935a612e01b0e3338" +checksum = "3e6cc1e89e689536eb5aeede61520e874df5a4707df811cd5da4aa5fbb2aae19" dependencies = [ - "base64 0.21.7", + "base64 0.22.0", "bytes", "futures-channel", "futures-core", @@ -2700,7 +2700,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls 0.22.3", - "rustls-pemfile 1.0.4", + "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", @@ -2846,20 +2846,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f48172685e6ff52a556baa527774f61fcaa884f59daf3375c62a3f1cd2549dab" -dependencies = [ - "base64 0.21.7", + "base64 0.22.0", "rustls-pki-types", ] @@ -2934,7 +2925,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3004,7 +2995,7 @@ checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3391,9 +3382,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strsim" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" @@ -3414,9 +3405,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.57" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -3431,9 +3422,9 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sysinfo" -version = "0.30.7" +version = "0.30.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c385888ef380a852a16209afc8cfad22795dd8873d69c9a14d2e2088f118d18" +checksum = "e9a84fe4cfc513b41cb2596b624e561ec9e7e1c4b46328e496ed56a53514ef2a" dependencies = [ "cfg-if", "core-foundation-sys", @@ -3507,7 +3498,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3597,7 +3588,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3684,7 +3675,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] @@ -3876,7 +3867,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", "wasm-bindgen-shared", ] @@ -3910,7 +3901,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4134,9 +4125,9 @@ checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winreg" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if", "windows-sys 0.48.0", @@ -4159,7 +4150,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.58", ] [[package]] diff --git a/lib/Cargo.toml b/lib/Cargo.toml index de893519..f2d1e1b2 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -12,7 +12,7 @@ edition.workspace = true chrono = { version = "0.4", default-features = false, features = ["clock", "serde", "std"] } crossbeam-channel = "0.5" derive_more = "0.99" -ffprobe = "0.3" +ffprobe = "0.4" file-rotate = "0.7" lazy_static = "1.4" lettre = { version = "0.11", features = ["builder", "rustls-tls", "smtp-transport"], default-features = false } diff --git a/tests/Cargo.toml b/tests/Cargo.toml index e8fe9ae0..f7b35ed5 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -14,7 +14,7 @@ ffplayout-lib = { path = "../lib" } chrono = "0.4" crossbeam-channel = "0.5" -ffprobe = "0.3" +ffprobe = "0.4" file-rotate = "0.7.0" lettre = { version = "0.11", features = ["builder", "rustls-tls", "smtp-transport"], default-features = false } log = "0.4" From ed1dc9df6278fc484dbb5534bb15fa2b27e7d526 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Tue, 9 Apr 2024 16:42:07 +0200 Subject: [PATCH 7/8] change version --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b11ddbc7..22505c4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1217,7 +1217,7 @@ checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" [[package]] name = "ffplayout" -version = "0.21.0-beta1" +version = "0.21.0-beta2" dependencies = [ "chrono", "clap", @@ -1239,7 +1239,7 @@ dependencies = [ [[package]] name = "ffplayout-api" -version = "0.21.0-beta1" +version = "0.21.0-beta2" dependencies = [ "actix-files", "actix-multipart", @@ -1278,7 +1278,7 @@ dependencies = [ [[package]] name = "ffplayout-lib" -version = "0.21.0-beta1" +version = "0.21.0-beta2" dependencies = [ "chrono", "crossbeam-channel", @@ -3458,7 +3458,7 @@ dependencies = [ [[package]] name = "tests" -version = "0.21.0-beta1" +version = "0.21.0-beta2" dependencies = [ "chrono", "crossbeam-channel", diff --git a/Cargo.toml b/Cargo.toml index c6f2faf5..8336c4db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ default-members = ["ffplayout-api", "ffplayout-engine", "tests"] resolver = "2" [workspace.package] -version = "0.21.0-beta1" +version = "0.21.0-beta2" license = "GPL-3.0" repository = "https://github.com/ffplayout/ffplayout" authors = ["Jonathan Baecker "] From c1da7f31db09018319be4d4641304cfd6dd4299d Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Tue, 9 Apr 2024 16:53:06 +0200 Subject: [PATCH 8/8] fix clippy warnings --- ffplayout-api/src/utils/files.rs | 2 +- ffplayout-engine/src/input/ingest.rs | 2 +- lib/src/utils/json_validate.rs | 6 +----- lib/src/utils/mod.rs | 2 +- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/ffplayout-api/src/utils/files.rs b/ffplayout-api/src/utils/files.rs index 0cdcdbe1..14903cd9 100644 --- a/ffplayout-api/src/utils/files.rs +++ b/ffplayout-api/src/utils/files.rs @@ -182,7 +182,7 @@ pub async fn browser( let mut media_files = vec![]; for file in files { - match MediaProbe::new(&file.to_string_lossy().to_string()) { + match MediaProbe::new(file.to_string_lossy().as_ref()) { Ok(probe) => { let mut duration = 0.0; diff --git a/ffplayout-engine/src/input/ingest.rs b/ffplayout-engine/src/input/ingest.rs index 9cca52e0..85ea600d 100644 --- a/ffplayout-engine/src/input/ingest.rs +++ b/ffplayout-engine/src/input/ingest.rs @@ -27,7 +27,7 @@ fn server_monitor( let line = line?; if !FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) - && !ignore.iter().any(|i| line.contains(&*i)) + && !ignore.iter().any(|i| line.contains(i)) { log_line(&line, level); } diff --git a/lib/src/utils/json_validate.rs b/lib/src/utils/json_validate.rs index 05bdb662..55b6abfa 100644 --- a/lib/src/utils/json_validate.rs +++ b/lib/src/utils/json_validate.rs @@ -95,11 +95,7 @@ fn check_media( let line = line?; if !FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) - && !config - .logging - .ignore_lines - .iter() - .any(|i| line.contains(&*i)) + && !config.logging.ignore_lines.iter().any(|i| line.contains(i)) && (line.contains("[error]") || line.contains("[fatal]")) { let log_line = line.replace("[error] ", "").replace("[fatal] ", ""); diff --git a/lib/src/utils/mod.rs b/lib/src/utils/mod.rs index 41129c32..f2ca5b0a 100644 --- a/lib/src/utils/mod.rs +++ b/lib/src/utils/mod.rs @@ -690,7 +690,7 @@ pub fn stderr_reader( let line = line?; if FFMPEG_IGNORE_ERRORS.iter().any(|i| line.contains(*i)) - || ignore.iter().any(|i| line.contains(&*i)) + || ignore.iter().any(|i| line.contains(i)) { continue; }