Skip to content

Commit b3805e6

Browse files
committed
imapmemserver: add support for SelectData.FirstUnseenSeqNum
1 parent dff6b09 commit b3805e6

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

imapserver/imapmemserver/mailbox.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,28 @@ func (mbox *Mailbox) selectDataLocked() *imap.SelectData {
181181
copy(permanentFlags, flags)
182182
permanentFlags = append(permanentFlags, imap.FlagWildcard)
183183

184+
// TODO: skip if IMAP4rev1 is disabled by the server, or IMAP4rev2 is
185+
// enabled by the client
186+
firstUnseenSeqNum := mbox.firstUnseenSeqNumLocked()
187+
184188
return &imap.SelectData{
185-
Flags: flags,
186-
PermanentFlags: permanentFlags,
187-
NumMessages: uint32(len(mbox.l)),
188-
UIDNext: mbox.uidNext,
189-
UIDValidity: mbox.uidValidity,
189+
Flags: flags,
190+
PermanentFlags: permanentFlags,
191+
NumMessages: uint32(len(mbox.l)),
192+
FirstUnseenSeqNum: firstUnseenSeqNum,
193+
UIDNext: mbox.uidNext,
194+
UIDValidity: mbox.uidValidity,
195+
}
196+
}
197+
198+
func (mbox *Mailbox) firstUnseenSeqNumLocked() uint32 {
199+
for i, msg := range mbox.l {
200+
seqNum := uint32(i) + 1
201+
if _, ok := msg.flags[canonicalFlag(imap.FlagSeen)]; !ok {
202+
return seqNum
203+
}
190204
}
205+
return 0
191206
}
192207

193208
func (mbox *Mailbox) flagsLocked() []imap.Flag {

0 commit comments

Comments
 (0)