aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/msgstore.go20
-rw-r--r--worker/imap/worker.go2
2 files changed, 19 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
+ }
}
}
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
}