Skip to content

Commit b88a6b6

Browse files
committed
imapmemserver: add support for SelectData.FirstUnseenSeqNum
1 parent 8931e70 commit b88a6b6

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
@@ -185,13 +185,28 @@ func (mbox *Mailbox) selectDataLocked() *imap.SelectData {
185185
copy(permanentFlags, flags)
186186
permanentFlags = append(permanentFlags, imap.FlagWildcard)
187187

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

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

0 commit comments

Comments
 (0)