use crate::event_handler;
use notify::Event;
use std::time::Duration;
use tokio::sync::mpsc::Receiver;
use tokio::time::sleep;
pub async fn debouncer(mut rx: Receiver<Event>, debounce_duration: Duration) {
let mut accumulated_events: Vec<Event> = Vec::new();
while let Some(first_event) = rx.recv().await {
println!("-> Event received. Starting debounce timer...");
accumulated_events.push(first_event);
loop {
tokio::select! {
res = rx.recv() => {
match res {
Some(event) => {
println!("-> Event received. Resetting debounce timer...");
accumulated_events.push(event);
}
None => break,
}
}
_ = sleep(debounce_duration) => {
break;
}
}
}
event_handler::handle_events(&accumulated_events);
accumulated_events.clear();
}
}