diff --git a/widgets/account.go b/widgets/account.go index 382a07a..c131f33 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -438,12 +438,25 @@ func (acct *AccountView) CheckMail() { Timeout: acct.acct.CheckMailTimeout, } acct.checkingMail = true - acct.worker.PostAction(msg, func(_ types.WorkerMessage) { - acct.SetStatus(statusline.ConnectionActivity("")) - acct.Lock() - acct.checkingMail = false - acct.Unlock() - }) + + var cb func(types.WorkerMessage) + cb = func(response types.WorkerMessage) { + dirsMsg, ok := response.(*types.CheckMailDirectories) + if ok { + checkMailMsg := &types.CheckMail{ + Directories: dirsMsg.Directories, + Command: acct.acct.CheckMailCmd, + Timeout: acct.acct.CheckMailTimeout, + } + acct.worker.PostAction(checkMailMsg, cb) + } else { // Done + acct.SetStatus(statusline.ConnectionActivity("")) + acct.Lock() + acct.checkingMail = false + acct.Unlock() + } + } + acct.worker.PostAction(msg, cb) } // CheckMailReset resets the check-mail timer diff --git a/worker/imap/checkmail.go b/worker/imap/checkmail.go index 21f2e4b..e0aef71 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) } diff --git a/worker/types/messages.go b/worker/types/messages.go index 9194cbe..00a1a78 100644 --- a/worker/types/messages.go +++ b/worker/types/messages.go @@ -255,3 +255,8 @@ type LabelList struct { Message Labels []string } + +type CheckMailDirectories struct { + Message + Directories []string +}