From bbbdde82429af1899b66a11ab7f96c3143da7262 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 23 Nov 2023 17:53:48 +0100 Subject: plugins/base: fix invalid FETCH seq set Closes: https://todo.sr.ht/~migadu/alps/176 --- plugins/base/imap.go | 20 +++++++++++--------- plugins/base/routes.go | 3 +-- 2 files changed, 12 insertions(+), 11 deletions(-) (limited to 'plugins/base') 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 -- cgit v1.2.3-59-g8ed1b