From d87acce480700297d77a79d592434e796c4832fc Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 23 Jan 2024 13:47:20 +0100 Subject: [PATCH 1/2] imapserver: add SessionTracker.EncodeNumMessages --- imapserver/tracker.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/imapserver/tracker.go b/imapserver/tracker.go index b22958cd..c615bdcf 100644 --- a/imapserver/tracker.go +++ b/imapserver/tracker.go @@ -282,3 +282,20 @@ func (t *SessionTracker) EncodeSeqNum(seqNum uint32) uint32 { } return seqNum } + +// EncodeNumMessages returns the number of messages in the mailbox from the +// client point-of-view. +func (t *SessionTracker) EncodeNumMessages() uint32 { + n := t.mailbox.numMessages + for i := len(t.queue) - 1; i >= 0; i-- { + update := t.queue[i] + // TODO: this doesn't handle increments > 1 + if update.numMessages != 0 { + n-- + } + if update.expunge != 0 { + n++ + } + } + return n +} From 88a9773af75b256ce5ae8f16a1fbd3d2868016f6 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 23 Jan 2024 13:47:34 +0100 Subject: [PATCH 2/2] imapmemserver: fix max seq num in MailboxView.staticNumSet --- imapserver/imapmemserver/mailbox.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imapserver/imapmemserver/mailbox.go b/imapserver/imapmemserver/mailbox.go index 88c156bf..9c2ffe02 100644 --- a/imapserver/imapmemserver/mailbox.go +++ b/imapserver/imapmemserver/mailbox.go @@ -454,7 +454,7 @@ func (mbox *MailboxView) staticNumSet(numSet imap.NumSet) imap.NumSet { switch numSet := numSet.(type) { case imap.SeqSet: - max := uint32(len(mbox.l)) + max := mbox.tracker.EncodeNumMessages() for i := range numSet { r := &numSet[i] staticNumRange(&r.Start, &r.Stop, max)