From d9842c23407ec7ee53ff851c8d3434f7d08ecb68 Mon Sep 17 00:00:00 2001 From: ppom Date: Mon, 7 Jul 2025 12:00:00 +0200 Subject: [PATCH] Duplicate::Extend: Re-Trigger only after actions - implement schedule_exec's only_after --- TODO | 3 +-- src/daemon/filter/mod.rs | 12 +++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/TODO b/TODO index 10bc482..80e7509 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,5 @@ -Test what happens when a Filter pattern set changes (I think it's shitty) +Test what happens when a Filter's pattern Set changes (I think it's shitty) -fix trigger only after when extend move match logging from concepts/filter to daemon/filter test new treedb::helpers diff --git a/src/daemon/filter/mod.rs b/src/daemon/filter/mod.rs index 5e629d5..07991b5 100644 --- a/src/daemon/filter/mod.rs +++ b/src/daemon/filter/mod.rs @@ -114,10 +114,9 @@ impl FilterManager { state.add_trigger(m.clone(), now); if already_triggered && Duplicate::Extend == self.filter.duplicate() { state.remove_trigger(&m); - // TODO only schedule after actions - self.schedule_exec(m, now, now, &mut state, false, only_after); + self.schedule_exec(m, now, now, &mut state, false, true); } else { - self.schedule_exec(m, now, now, &mut state, false); + self.schedule_exec(m, now, now, &mut state, false, false); } } @@ -135,7 +134,7 @@ impl FilterManager { let mut state = self.state.lock().unwrap(); state.remove_match(&match_); state.add_trigger(match_.clone(), now); - self.schedule_exec(match_, now, now, &mut state, false); + self.schedule_exec(match_, now, now, &mut state, false, false); Ok(()) } @@ -245,6 +244,7 @@ impl FilterManager { now: Time, state: &mut MutexGuard, startup: bool, + only_after: bool, ) { for action in self .filter @@ -252,6 +252,8 @@ impl FilterManager { .values() // On startup, skip oneshot actions .filter(|action| !startup || !action.oneshot()) + // If only_after, keep only after actions + .filter(|action| !only_after || action.after_duration().is_some()) { let exec_time = t + action.after_duration().unwrap_or_default(); let m = m.clone(); @@ -313,7 +315,7 @@ impl FilterManager { // Insert back the upcoming times new_map.insert(t, number_of_actions); // Schedule the upcoming times - self.schedule_exec(m.clone(), t, now, &mut state, true); + self.schedule_exec(m.clone(), t, now, &mut state, true, false); } } if new_map.is_empty() {