Skip to content

Commit 8931e70

Browse files
committed
imapserver: add SelectData.FirstUnseenSeqNum
1 parent 9d73778 commit 8931e70

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

imapserver/select.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ func (c *Conn) handleSelect(tag string, dec *imapwire.Decoder, readOnly bool) er
4545
if err := c.writeObsoleteRecent(data.NumRecent); err != nil {
4646
return err
4747
}
48+
if data.FirstUnseenSeqNum != 0 {
49+
if err := c.writeObsoleteUnseen(data.FirstUnseenSeqNum); err != nil {
50+
return err
51+
}
52+
}
4853
}
4954
if err := c.writeUIDValidity(data.UIDValidity); err != nil {
5055
return err
@@ -121,6 +126,15 @@ func (c *Conn) writeObsoleteRecent(n uint32) error {
121126
return enc.Atom("*").SP().Number(n).SP().Atom("RECENT").CRLF()
122127
}
123128

129+
func (c *Conn) writeObsoleteUnseen(n uint32) error {
130+
enc := newResponseEncoder(c)
131+
defer enc.end()
132+
enc.Atom("*").SP().Atom("OK").SP()
133+
enc.Special('[').Atom("UNSEEN").SP().Number(n).Special(']')
134+
enc.SP().Text("First unseen message")
135+
return enc.CRLF()
136+
}
137+
124138
func (c *Conn) writeUIDValidity(uidValidity uint32) error {
125139
enc := newResponseEncoder(c)
126140
defer enc.end()

select.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ type SelectData struct {
1616
PermanentFlags []Flag
1717
// Number of messages in this mailbox (aka. "EXISTS")
1818
NumMessages uint32
19-
// Number of recent messages in this mailbox ("RECENT") (Obsolete, IMAP4rev1 only).
19+
// Sequence number of the first unseen message. Obsolete, IMAP4rev1 only.
20+
// Server-only, not supported in imapclient.
21+
FirstUnseenSeqNum uint32
22+
// Number of recent messages in this mailbox. Obsolete, IMAP4rev1 only.
2023
// Server-only, not supported in imapclient.
2124
NumRecent uint32
2225
UIDNext UID

0 commit comments

Comments
 (0)