Skip to content

Commit 978fe71

Browse files
authored
fix: debounce events (#711)
1 parent e5f33f7 commit 978fe71

File tree

3 files changed

+59
-17
lines changed

3 files changed

+59
-17
lines changed

notify-debouncer-full/src/lib.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -226,18 +226,18 @@ impl<T: FileIdCache> DebounceDataInner<T> {
226226
let mut kind_index = HashMap::new();
227227

228228
while let Some(event) = queue.events.pop_front() {
229-
if now.saturating_duration_since(event.time) >= self.timeout {
230-
// remove previous event of the same kind
231-
if let Some(idx) = kind_index.get(&event.kind).copied() {
232-
events_expired.remove(idx);
233-
234-
kind_index.values_mut().for_each(|i| {
235-
if *i > idx {
236-
*i -= 1
237-
}
238-
})
239-
}
229+
// remove previous event of the same kind
230+
if let Some(idx) = kind_index.get(&event.kind).copied() {
231+
events_expired.remove(idx);
232+
233+
kind_index.values_mut().for_each(|i| {
234+
if *i > idx {
235+
*i -= 1
236+
}
237+
})
238+
}
240239

240+
if now.saturating_duration_since(event.time) >= self.timeout {
241241
kind_index.insert(event.kind, events_expired.len());
242242

243243
events_expired.push(event);
@@ -812,6 +812,7 @@ mod tests {
812812
"add_remove_event_after_create_and_modify_event",
813813
"add_remove_parent_event_after_remove_child_event",
814814
"add_errors",
815+
"debounce_modify_events",
815816
"emit_continuous_modify_content_events",
816817
"emit_events_in_chronological_order",
817818
"emit_events_with_a_prepended_rename_event",
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
state: {
3+
timeout: 3
4+
}
5+
events: [
6+
{ kind: "modify-any", paths: ["/watch/file"], time: 2 }
7+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
8+
]
9+
expected: {
10+
queues: {
11+
/watch/file: {
12+
events: [
13+
{ kind: "modify-any", paths: ["*"], time: 2 }
14+
{ kind: "modify-any", paths: ["*"], time: 4 }
15+
]
16+
}
17+
}
18+
events: {
19+
1: []
20+
2: []
21+
3: []
22+
4: []
23+
5: []
24+
6: []
25+
7: [
26+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
27+
]
28+
8: [
29+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
30+
]
31+
9: [
32+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
33+
]
34+
10: [
35+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
36+
]
37+
100: [
38+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
39+
]
40+
1000: [
41+
{ kind: "modify-any", paths: ["/watch/file"], time: 4 }
42+
]
43+
}
44+
}
45+
}

notify-debouncer-full/test_cases/emit_continuous_modify_content_events.hjson

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,8 @@
2323
3: []
2424
4: []
2525
5: []
26-
6: [
27-
{ kind: "modify-data-content", paths: ["/watch/file"], time: 1 }
28-
]
29-
7: [
30-
{ kind: "modify-data-content", paths: ["/watch/file"], time: 2 }
31-
]
26+
6: []
27+
7: []
3228
8: [
3329
{ kind: "modify-data-content", paths: ["/watch/file"], time: 3 }
3430
]

0 commit comments

Comments
 (0)