From 8de93c50d2cf2144cfd3050cf7970a4ee9860bf4 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 3 Dec 2019 19:48:28 +0100 Subject: Add basic pagination to message list References: https://todo.sr.ht/~sircmpwn/koushin/22 --- imap.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'imap.go') diff --git a/imap.go b/imap.go index 748d5cb..9c83fc7 100644 --- a/imap.go +++ b/imap.go @@ -206,23 +206,23 @@ func (msg *imapMessage) PartTree() *IMAPPartNode { return imapPartTree(msg.BodyStructure, nil) } -func listMessages(conn *imapclient.Client, mboxName string) ([]imapMessage, error) { +func listMessages(conn *imapclient.Client, mboxName string, page int) ([]imapMessage, error) { if err := ensureMailboxSelected(conn, mboxName); err != nil { return nil, err } - n := uint32(50) - mbox := conn.Mailbox() - from := uint32(1) - to := mbox.Messages - if mbox.Messages == 0 { + to := int(mbox.Messages) - page*messagesPerPage + from := to - messagesPerPage + if from <= 0 { + from = 1 + } + if to <= 0 { return nil, nil - } else if mbox.Messages > n { - from = mbox.Messages - n } + seqSet := new(imap.SeqSet) - seqSet.AddRange(from, to) + seqSet.AddRange(uint32(from), uint32(to)) fetch := []imap.FetchItem{imap.FetchEnvelope, imap.FetchUid, imap.FetchBodyStructure} @@ -232,7 +232,7 @@ func listMessages(conn *imapclient.Client, mboxName string) ([]imapMessage, erro done <- conn.Fetch(seqSet, fetch, ch) }() - msgs := make([]imapMessage, 0, n) + msgs := make([]imapMessage, 0, to-from) for msg := range ch { msgs = append(msgs, imapMessage{msg}) } -- cgit v1.2.3-59-g8ed1b