aboutsummaryrefslogtreecommitdiffstats
path: root/worker/imap/checkmail.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker/imap/checkmail.go')
-rw-r--r--worker/imap/checkmail.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/worker/imap/checkmail.go b/worker/imap/checkmail.go
new file mode 100644
index 00000000..d9dcfd33
--- /dev/null
+++ b/worker/imap/checkmail.go
@@ -0,0 +1,40 @@
+package imap
+
+import (
+ "git.sr.ht/~rjarry/aerc/models"
+ "git.sr.ht/~rjarry/aerc/worker/types"
+ "github.com/emersion/go-imap"
+)
+
+func (w *IMAPWorker) handleCheckMailMessage(msg *types.CheckMail) {
+ items := []imap.StatusItem{
+ imap.StatusMessages,
+ imap.StatusRecent,
+ imap.StatusUnseen,
+ }
+ for _, dir := range msg.Directories {
+ w.worker.Logger.Printf("Getting status of directory %s", dir)
+ status, err := w.client.Status(dir, items)
+ if err != nil {
+ w.worker.PostMessage(&types.Error{
+ Message: types.RespondTo(msg),
+ Error: err,
+ }, nil)
+ } else {
+ w.worker.PostMessage(&types.DirectoryInfo{
+ Info: &models.DirectoryInfo{
+ Flags: status.Flags,
+ Name: status.Name,
+ ReadOnly: status.ReadOnly,
+ AccurateCounts: true,
+
+ Exists: int(status.Messages),
+ Recent: int(status.Recent),
+ Unseen: int(status.Unseen),
+ },
+ SkipSort: true,
+ }, nil)
+ }
+ }
+ w.worker.PostMessage(&types.Done{Message: types.RespondTo(msg)}, nil)
+}