aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/base/imap.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/imap.go')
-rw-r--r--plugins/base/imap.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index e3720d0..bce1dc1 100644
--- a/plugins/base/imap.go
+++ b/plugins/base/imap.go
@@ -46,14 +46,28 @@ func (mbox *MailboxInfo) HasAttr(flag string) bool {
}
func listMailboxes(conn *imapclient.Client) ([]MailboxInfo, error) {
+ var options imap.ListOptions
+ if conn.Caps().Has(imap.CapListStatus) {
+ options.ReturnStatus = &imap.StatusOptions{
+ NumMessages: true,
+ UIDValidity: true,
+ NumUnseen: true,
+ }
+ }
+
var mailboxes []MailboxInfo
- list := conn.List("", "*", nil)
+ list := conn.List("", "*", &options)
for {
- mbox := list.Next()
- if mbox == nil {
+ data := list.Next()
+ if data == nil {
break
}
- mailboxes = append(mailboxes, MailboxInfo{mbox, false, -1, -1})
+ mbox := MailboxInfo{data, false, -1, -1}
+ if mbox.Status != nil {
+ mbox.Unseen = int(*mbox.Status.NumUnseen)
+ mbox.Total = int(*mbox.Status.NumMessages)
+ }
+ mailboxes = append(mailboxes, mbox)
}
if err := list.Close(); err != nil {
return nil, fmt.Errorf("failed to list mailboxes: %v", err)