aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarLibravatar Simon Ser <[email protected]> 2023-11-23 17:53:48 +0100
committerLibravatarLibravatar Simon Ser <[email protected]> 2023-11-23 17:53:48 +0100
commitbbbdde82429af1899b66a11ab7f96c3143da7262 (patch)
treefb7d89377f74149da0365f1eba9ddfbfab088b4e
parente7b3e76f72190d81b7dd8c1c8d2d404b192d1f3b (diff)
downloadalps-bbbdde82429af1899b66a11ab7f96c3143da7262.tar.gz
alps-bbbdde82429af1899b66a11ab7f96c3143da7262.tar.bz2
alps-bbbdde82429af1899b66a11ab7f96c3143da7262.zip
plugins/base: fix invalid FETCH seq set
Closes: https://todo.sr.ht/~migadu/alps/176
-rw-r--r--plugins/base/imap.go20
-rw-r--r--plugins/base/routes.go3
2 files changed, 12 insertions, 11 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) {
diff --git a/plugins/base/routes.go b/plugins/base/routes.go
index 31313a2..8b346a2 100644
--- a/plugins/base/routes.go
+++ b/plugins/base/routes.go
@@ -260,8 +260,7 @@ func handleGetMailbox(ctx *alps.Context) error {
if query != "" {
msgs, total, err = searchMessages(c, mbox.Name(), query, page, messagesPerPage)
} else {
- msgs, err = listMessages(c, mbox, page, messagesPerPage)
- total = int(*mbox.NumMessages)
+ msgs, total, err = listMessages(c, mbox.Name(), page, messagesPerPage)
}
if err != nil {
return err