Fix config watching

This commit is contained in:
Jeremy Soller 2025-06-23 11:20:48 -06:00
parent 1af2f4ffe5
commit a85b369399
3 changed files with 29 additions and 36 deletions

View file

@ -26,7 +26,6 @@ dirs.workspace = true
tokio = { version = "1.44", optional = true, features = ["time"] }
async-std = { version = "1.13", optional = true }
tracing = "0.1"
notify-debouncer-full = "0.5.0"
[target.'cfg(unix)'.dependencies]
xdg = "2.5"

View file

@ -4,7 +4,6 @@ use notify::{
event::{EventKind, ModifyKind},
RecommendedWatcher, Watcher,
};
use notify_debouncer_full::{DebouncedEvent, Debouncer, RecommendedCache};
use serde::{de::DeserializeOwned, Serialize};
use std::{
fmt, fs,
@ -246,7 +245,7 @@ impl Config {
// This may end up being an mpsc channel instead of a function
// See EventHandler in the notify crate: https://docs.rs/notify/latest/notify/trait.EventHandler.html
// Having a callback allows for any application abstraction to be used
pub fn watch<F>(&self, f: F) -> Result<Debouncer<RecommendedWatcher, RecommendedCache>, Error>
pub fn watch<F>(&self, f: F) -> Result<RecommendedWatcher, Error>
// Argument is an array of all keys that changed in that specific transaction
//TODO: simplify F requirements
where
@ -257,14 +256,11 @@ impl Config {
return Err(Error::NoConfigDirectory);
};
let user_path_clone = user_path.clone();
let mut watcher = notify_debouncer_full::new_debouncer(
Duration::from_secs(1),
None,
move |event_res: Result<Vec<DebouncedEvent>, Vec<notify::Error>>| {
let mut watcher = notify::recommended_watcher(
move |event_res: Result<notify::Event, notify::Error>| {
match event_res {
Ok(events) => {
for event in events {
match &event.event.kind {
Ok(event) => {
match &event.kind {
EventKind::Access(_)
| EventKind::Modify(ModifyKind::Metadata(_)) => {
// Data not mutated
@ -294,14 +290,13 @@ impl Config {
f(&watch_config, &keys);
}
}
}
Err(_errs) => {
Err(_err) => {
//TODO: handle errors
}
}
},
)?;
watcher.watch(user_path, notify::RecursiveMode::NonRecursive)?;
watcher.watch(user_path, notify::RecursiveMode::Recursive)?;
Ok(watcher)
}

View file

@ -1,7 +1,6 @@
use iced_futures::futures::{SinkExt, Stream};
use iced_futures::{futures::channel::mpsc, stream};
use notify::RecommendedWatcher;
use notify_debouncer_full::{Debouncer, RecommendedCache};
use std::{borrow::Cow, hash::Hash};
use crate::{Config, CosmicConfigEntry};
@ -10,7 +9,7 @@ pub enum ConfigState<T> {
Init(Cow<'static, str>, u64, bool),
Waiting(
T,
Debouncer<RecommendedWatcher, RecommendedCache>,
RecommendedWatcher,
mpsc::Receiver<Vec<String>>,
Config,
),