Do not reset the timer when new activities are queued
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user