diff --git a/src/main.rs b/src/main.rs index 5ba5ff5..6a8386a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ struct Flags { #[arg(long, default_value = "8")] threads: i32, - #[arg(long, default_value = "1.0")] + #[arg(long, default_value = "2.0")] stream_retain: f32, #[arg(long, default_value = "5")] stream_step: u64, @@ -180,12 +180,12 @@ struct AWhisper { ack: Option>, } -#[derive(Clone)] +#[derive(Clone, Debug)] struct Whispered { data: Vec, } -#[derive(Clone)] +#[derive(Clone, Debug)] struct AWhispered { data: String, offset: i64, @@ -205,7 +205,7 @@ fn new_a_whispered(data: String, start: i64, stop: i64) -> AWhispered { } impl Whispered { - fn as_string(&self) -> String { + fn to_string(&self) -> String { let mut result = "".to_string(); for i in 0..self.data.len() { result = format!("{} {}", result, &self.data[i].data); @@ -213,21 +213,25 @@ impl Whispered { result } + fn before(&self, t: &f32) -> Whispered { + let mut result = new_whispered(); + let end = self.data.iter().map(|x| x.offset + x.length).max().unwrap(); + let t = (end as f32) - *t; + self.data + .iter() + .filter(|x| ((x.offset + x.length) as f32) <= t) + .for_each(|x| result.data.push(x.clone())); + eprintln!("before {}: {:?} => {:?}", t, &self.data, &result.data); + result + } + fn after(&self, t: &f32) -> Whispered { let mut result = new_whispered(); self.data .iter() - .filter(|x| x.offset as f32 > *t) - .for_each(|x| result.data.push(x.clone())); - result - } - - fn before(&self, t: &f32) -> Whispered { - let mut result = new_whispered(); - self.data - .iter() - .filter(|x| ((x.offset + x.length) as f32) < *t) + .filter(|x| x.offset as f32 >= *t) .for_each(|x| result.data.push(x.clone())); + eprintln!("after {}: {:?} => {:?}", t, &self.data, &result.data); result } @@ -243,8 +247,12 @@ struct Handler { impl Handler { fn on_success(&self, result: Whispered) { - eprintln!("{}", chrono::Local::now()); - println!("{}", result.after(&self.head).before(&self.tail).as_string()); + eprintln!("{}: {:?}", chrono::Local::now(), &result); + println!("{}", result + .after(&(self.head * 100.0)) + .before(&(self.tail * 100.0)) + .to_string(), + ); } fn on_error(&self, msg: String) { eprintln!("error: {}", msg);