diff options
author | Reto Brunner <reto@labrat.space> | 2020-02-24 20:18:31 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2020-02-25 11:05:26 -0500 |
commit | 5dd0f454c197ccbce369ee88d47d5be8cd5e8265 (patch) | |
tree | 081b3b032afa6e945478a1e5bf1dfcf69b64fcb5 /lib | |
parent | 53d0c0a9030ce20ee98c2a0bdb221e73f647c16c (diff) | |
download | aerc-5dd0f454c197ccbce369ee88d47d5be8cd5e8265.tar.gz |
lib/msgstore: debounce directoryUpdateRequests
Apparently sending an event for every incoming messageInfo slows down the application significantly. Therefore this slows down the emmision rate, on the cost of being out of date in some cases.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/msgstore.go | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go index ae58aaf..b1785c1 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -42,6 +42,9 @@ type MessageStore struct { triggerNewEmail func(*models.MessageInfo) triggerDirectoryChange func() + + dirInfoUpdateDebounce *time.Timer + dirInfoUpdateDelay time.Duration } func NewMessageStore(worker *types.Worker, @@ -50,6 +53,8 @@ func NewMessageStore(worker *types.Worker, triggerNewEmail func(*models.MessageInfo), triggerDirectoryChange func()) *MessageStore { + dirInfoUpdateDelay := 5 * time.Second + return &MessageStore{ Deleted: make(map[uint32]interface{}), DirInfo: *dirInfo, @@ -68,6 +73,9 @@ func NewMessageStore(worker *types.Worker, triggerNewEmail: triggerNewEmail, triggerDirectoryChange: triggerDirectoryChange, + + dirInfoUpdateDelay: dirInfoUpdateDelay, + dirInfoUpdateDebounce: time.NewTimer(dirInfoUpdateDelay), } } @@ -267,9 +275,15 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { } if requestDirInfo { - store.worker.PostAction(&types.DirectoryInfoUpdateRequest{ - Name: store.DirInfo.Name, - }, nil) + select { + case <-store.dirInfoUpdateDebounce.C: + store.worker.PostAction(&types.DirectoryInfoUpdateRequest{ + Name: store.DirInfo.Name, + }, nil) + store.dirInfoUpdateDebounce.Reset(store.dirInfoUpdateDelay) + default: + // do nothing + } } } |