files fix

feature/configv2
prplV 2025-05-05 09:14:25 -04:00
parent 3dd238cf97
commit aae0391a0c
1 changed files with 22 additions and 5 deletions

View File

@ -19,11 +19,18 @@
type MpscSender = Arc<Sender<Events>>; type MpscSender = Arc<Sender<Events>>;
type EventHandlers = HashMap<Arc<str>, (Triggers, MpscSender)>; type EventHandlers = HashMap<Arc<str>, (Triggers, MpscSender)>;
#[derive(Debug)]
enum FileState {
Ok,
NotFound,
}
#[derive(Debug)] #[derive(Debug)]
pub struct FilesController { pub struct FilesController {
name : Arc<str>, name : Arc<str>,
path : String, path : String,
code_name : Arc<str>, code_name : Arc<str>,
state : FileState,
watcher : Option<Inotify>, watcher : Option<Inotify>,
triggers : EventHandlers, triggers : EventHandlers,
} }
@ -38,9 +45,10 @@
pub fn new(name: &str, triggers: EventHandlers) -> FilesController { pub fn new(name: &str, triggers: EventHandlers) -> FilesController {
let name: Arc<str> = Arc::from(name); let name: Arc<str> = Arc::from(name);
Self { Self {
name: name.clone(), name : name.clone(),
path : String::new(), path : String::new(),
watcher: None, state : FileState::Ok,
watcher : None,
triggers, triggers,
code_name : name.clone(), code_name : name.clone(),
} }
@ -86,6 +94,12 @@
// 1) existing check // 1) existing check
// dbg!(&self); // dbg!(&self);
if let Ok(_) = check_file(&self.name, &self.path).await { if let Ok(_) = check_file(&self.name, &self.path).await {
if let FileState::NotFound = self.state {
info!("File {} ({}) was found in determined scope. Notifying ...", self.name, self.code_name);
self.state = FileState::Ok;
// reseting negative outcome in prc
self.trigger_on(None).await;
}
match &mut self.watcher { match &mut self.watcher {
Some(notify) => { Some(notify) => {
let mut buffer = [0; 1024]; let mut buffer = [0; 1024];
@ -118,8 +132,11 @@
None => { /* DEAD END */}, None => { /* DEAD END */},
} }
} else { } else {
warn!("File {} ({}) was not found in determined scope", self.name, &self.path); if let FileState::Ok = self.state {
self.trigger_on(Some(FileTriggerType::OnDelete)).await; warn!("File {} ({}) was not found in determined scope", self.name, &self.path);
self.state = FileState::NotFound;
self.trigger_on(Some(FileTriggerType::OnDelete)).await;
}
return; return;
} }
self.trigger_on(None).await; self.trigger_on(None).await;