diff options
author | 2023-11-23 17:53:48 +0100 | |
---|---|---|
committer | 2023-11-23 17:53:48 +0100 | |
commit | bbbdde82429af1899b66a11ab7f96c3143da7262 (patch) | |
tree | fb7d89377f74149da0365f1eba9ddfbfab088b4e | |
parent | e7b3e76f72190d81b7dd8c1c8d2d404b192d1f3b (diff) | |
download | alps-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.go | 20 | ||||
-rw-r--r-- | plugins/base/routes.go | 3 |
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 |