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.go20
1 files changed, 11 insertions, 9 deletions
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index c71f0d3..48b49df 100644
--- a/plugins/base/imap.go
+++ b/plugins/base/imap.go
@@ -426,18 +426,21 @@ func (msg *IMAPMessage) HasFlag(flag imap.Flag) bool {
return false
}
-func listMessages(conn *imapclient.Client, mbox *MailboxStatus, page, messagesPerPage int) ([]IMAPMessage, error) {
- if err := ensureMailboxSelected(conn, mbox.Name()); err != nil {
- return nil, err
+func listMessages(conn *imapclient.Client, mboxName string, page, messagesPerPage int) (msgs []IMAPMessage, total int, err error) {
+ if err := ensureMailboxSelected(conn, mboxName); err != nil {
+ return nil, 0, err
}
- to := int(*mbox.NumMessages) - page*messagesPerPage
+ mbox := conn.Mailbox()
+ total = int(mbox.NumMessages)
+
+ to := total - page*messagesPerPage
from := to - messagesPerPage + 1
if from <= 0 {
from = 1
}
if to <= 0 {
- return nil, nil
+ return nil, total, nil
}
seqSet := imap.SeqSetRange(uint32(from), uint32(to))
@@ -449,12 +452,11 @@ func listMessages(conn *imapclient.Client, mbox *MailboxStatus, page, messagesPe
}
imapMsgs, err := conn.Fetch(seqSet, &options).Collect()
if err != nil {
- return nil, fmt.Errorf("failed to fetch message list: %v", err)
+ return nil, 0, fmt.Errorf("failed to fetch message list: %v", err)
}
- var msgs []IMAPMessage
for _, msg := range imapMsgs {
- msgs = append(msgs, IMAPMessage{msg, mbox.Name()})
+ msgs = append(msgs, IMAPMessage{msg, mboxName})
}
// Reverse list of messages
@@ -463,7 +465,7 @@ func listMessages(conn *imapclient.Client, mbox *MailboxStatus, page, messagesPe
msgs[i], msgs[opp] = msgs[opp], msgs[i]
}
- return msgs, nil
+ return msgs, total, nil
}
func searchMessages(conn *imapclient.Client, mboxName, query string, page, messagesPerPage int) (msgs []IMAPMessage, total int, err error) {