From 9c0e54f9d9afb5f4a9d91ca9766fc2ef2cfd82de Mon Sep 17 00:00:00 2001 From: kt programs Date: Sun, 25 Sep 2022 09:55:21 +0800 Subject: imap: stop checkmail if there are pending actions Pass message containing remaining directories to check. Account widget will recursively call CheckMail with the remaining directories until a Done message is returned. Only needed for IMAP worker as other workers run check-mail-cmd in a separate goroutine. Suggested-By: Tim Culverhouse Signed-off-by: kt programs Tested-by: Tim Culverhouse --- worker/imap/checkmail.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'worker/imap/checkmail.go') diff --git a/worker/imap/checkmail.go b/worker/imap/checkmail.go index 21f2e4bb..e0aef71b 100644 --- a/worker/imap/checkmail.go +++ b/worker/imap/checkmail.go @@ -13,7 +13,13 @@ func (w *IMAPWorker) handleCheckMailMessage(msg *types.CheckMail) { imap.StatusRecent, imap.StatusUnseen, } + var remaining []string for _, dir := range msg.Directories { + if len(w.worker.Actions) > 0 { + remaining = append(remaining, dir) + continue + } + logging.Debugf("Getting status of directory %s", dir) status, err := w.client.Status(dir, items) if err != nil { @@ -38,5 +44,12 @@ func (w *IMAPWorker) handleCheckMailMessage(msg *types.CheckMail) { }, nil) } } + if len(remaining) > 0 { + w.worker.PostMessage(&types.CheckMailDirectories{ + Message: types.RespondTo(msg), + Directories: remaining, + }, nil) + return + } w.worker.PostMessage(&types.Done{Message: types.RespondTo(msg)}, nil) } -- cgit