diff --git a/libmarlin/src/watcher.rs b/libmarlin/src/watcher.rs index cfcb2ca..5b24033 100644 --- a/libmarlin/src/watcher.rs +++ b/libmarlin/src/watcher.rs @@ -92,20 +92,23 @@ struct RemoveTracker { impl RemoveTracker { fn record(&mut self, path: &PathBuf) { + #[cfg(not(windows))] if let Ok(h) = Handle::from_path(path) { self.map.insert(h.ino(), (path.clone(), Instant::now())); - } else { - // fall back to hashing path if inode not available - use std::collections::hash_map::DefaultHasher; - use std::hash::{Hash, Hasher}; - let mut hasher = DefaultHasher::new(); - path.hash(&mut hasher); - self.map - .insert(hasher.finish(), (path.clone(), Instant::now())); + return; } + + // fall back to hashing path if inode not available or on Windows + use std::collections::hash_map::DefaultHasher; + use std::hash::{Hash, Hasher}; + let mut hasher = DefaultHasher::new(); + path.hash(&mut hasher); + self.map + .insert(hasher.finish(), (path.clone(), Instant::now())); } fn match_create(&mut self, path: &PathBuf, window: Duration) -> Option { + #[cfg(not(windows))] if let Ok(h) = Handle::from_path(path) { if let Some((old, ts)) = self.map.remove(&h.ino()) { if Instant::now().duration_since(ts) <= window { @@ -115,6 +118,19 @@ impl RemoveTracker { } } } + + // fall back to hashing path when handle not available or on Windows + use std::collections::hash_map::DefaultHasher; + use std::hash::{Hash, Hasher}; + let mut hasher = DefaultHasher::new(); + path.hash(&mut hasher); + if let Some((old, ts)) = self.map.remove(&hasher.finish()) { + if Instant::now().duration_since(ts) <= window { + return Some(old); + } else { + return None; + } + } None }