Async cleanup

This commit is contained in:
Antoine Gersant 2024-10-11 21:34:36 -07:00
parent d53681b6c0
commit 090ca387ab

View file

@ -1,14 +1,14 @@
use std::{ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::{mpsc::channel, Arc}, sync::Arc,
time::Duration, time::Duration,
}; };
use log::{error, info}; use log::{error, info};
use notify::{RecommendedWatcher, RecursiveMode, Watcher}; use notify::{RecommendedWatcher, RecursiveMode, Watcher};
use notify_debouncer_full::{DebounceEventResult, Debouncer, FileIdMap}; use notify_debouncer_full::{Debouncer, FileIdMap};
use regex::Regex; use regex::Regex;
use tokio::sync::RwLock; use tokio::sync::{mpsc::unbounded_channel, RwLock};
use crate::app::Error; use crate::app::Error;
@ -81,9 +81,11 @@ impl Manager {
pub async fn new(config_file_path: &Path, auth_secret: auth::Secret) -> Result<Self, Error> { pub async fn new(config_file_path: &Path, auth_secret: auth::Secret) -> Result<Self, Error> {
tokio::fs::File::create_new(config_file_path).await.ok(); tokio::fs::File::create_new(config_file_path).await.ok();
let (sender, receiver) = channel::<DebounceEventResult>(); let (sender, mut receiver) = unbounded_channel::<()>();
let mut debouncer = let mut debouncer =
notify_debouncer_full::new_debouncer(Duration::from_secs(1), None, sender)?; notify_debouncer_full::new_debouncer(Duration::from_secs(1), None, move |_| {
sender.send(()).ok();
})?;
debouncer debouncer
.watcher() .watcher()
@ -100,9 +102,9 @@ impl Manager {
let manager = manager.clone(); let manager = manager.clone();
async move { async move {
loop { loop {
match receiver.recv() { match receiver.recv().await {
Err(_) => break, None => break,
Ok(_) => { Some(_) => {
if let Err(e) = manager.reload_config().await { if let Err(e) = manager.reload_config().await {
error!("Configuration error: {e}"); error!("Configuration error: {e}");
} else { } else {