Do not reset the timer when new activities are queued

This commit is contained in:
André Duffeck
2025-05-16 10:24:43 +02:00
parent c618c7436a
commit 400fc0b4c2
+13 -9
View File
@@ -92,17 +92,19 @@ func (d *Debouncer) Debounce(id string, ra RawActivity) {
defer d.mutex.Unlock() defer d.mutex.Unlock()
activities := []RawActivity{ra} activities := []RawActivity{ra}
item := &queueItem{
activities: activities,
}
if i, ok := d.pending.Load(id); ok { if i, ok := d.pending.Load(id); ok {
item, ok := i.(*queueItem) // if the item is already in the queue, append the new activities
item, ok = i.(*queueItem)
if ok { if ok {
activities = append(item.activities, ra) item.activities = append(item.activities, ra)
} }
item.timer.Stop()
} }
d.pending.Store(id, &queueItem{ if item.timer == nil {
activities: activities, item.timer = time.AfterFunc(d.after, func() {
timer: time.AfterFunc(d.after, func() {
if _, ok := d.inProgress.Load(id); ok { if _, ok := d.inProgress.Load(id); ok {
// Reschedule this run for when the previous run has finished // Reschedule this run for when the previous run has finished
d.mutex.Lock() d.mutex.Lock()
@@ -117,9 +119,11 @@ func (d *Debouncer) Debounce(id string, ra RawActivity) {
d.pending.Delete(id) d.pending.Delete(id)
d.inProgress.Store(id, true) d.inProgress.Store(id, true)
defer d.inProgress.Delete(id) defer d.inProgress.Delete(id)
d.f(id, activities) d.f(id, item.activities)
}), })
}) }
d.pending.Store(id, item)
} }
// New creates a new ActivitylogService // New creates a new ActivitylogService