diff --git a/noxis-rs/src/utils/files.rs b/noxis-rs/src/utils/files.rs index ce431fb..da87b0f 100644 --- a/noxis-rs/src/utils/files.rs +++ b/noxis-rs/src/utils/files.rs @@ -19,11 +19,18 @@ type MpscSender = Arc>; type EventHandlers = HashMap, (Triggers, MpscSender)>; + #[derive(Debug)] + enum FileState { + Ok, + NotFound, + } + #[derive(Debug)] pub struct FilesController { name : Arc, path : String, code_name : Arc, + state : FileState, watcher : Option, triggers : EventHandlers, } @@ -38,9 +45,10 @@ pub fn new(name: &str, triggers: EventHandlers) -> FilesController { let name: Arc = Arc::from(name); Self { - name: name.clone(), + name : name.clone(), path : String::new(), - watcher: None, + state : FileState::Ok, + watcher : None, triggers, code_name : name.clone(), } @@ -86,6 +94,12 @@ // 1) existing check // dbg!(&self); 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 { Some(notify) => { let mut buffer = [0; 1024]; @@ -110,7 +124,7 @@ }, } } - self.trigger_on(Some(FileTriggerType::OnChange)).await; + self.trigger_on(Some(FileTriggerType::OnChange)).await; return; } } @@ -118,8 +132,11 @@ None => { /* DEAD END */}, } } else { - warn!("File {} ({}) was not found in determined scope", self.name, &self.path); - self.trigger_on(Some(FileTriggerType::OnDelete)).await; + if let FileState::Ok = self.state { + warn!("File {} ({}) was not found in determined scope", self.name, &self.path); + self.state = FileState::NotFound; + self.trigger_on(Some(FileTriggerType::OnDelete)).await; + } return; } self.trigger_on(None).await;