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 + } } } diff --git a/worker/imap/worker.go b/worker/imap/worker.go index ddd95b6..1037f81 100644 --- a/worker/imap/worker.go +++ b/worker/imap/worker.go @@ -181,6 +181,8 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error { w.handleAppendMessage(msg) case *types.SearchDirectory: w.handleSearchDirectory(msg) + case *types.DirectoryInfoUpdateRequest: + // not implemented default: reterr = errUnsupported }