diff options
-rw-r--r-- | lib/msgstore.go | 4 | ||||
-rw-r--r-- | worker/imap/fetch.go | 24 | ||||
-rw-r--r-- | worker/imap/worker.go | 12 |
3 files changed, 35 insertions, 5 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go index 900ec166..56725e30 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -112,9 +112,7 @@ func merge(to *types.MessageInfo, from *types.MessageInfo) { if from.Envelope != nil { to.Envelope = from.Envelope } - if len(from.Flags) != 0 { - to.Flags = from.Flags - } + to.Flags = from.Flags if from.Size != 0 { to.Size = from.Size } diff --git a/worker/imap/fetch.go b/worker/imap/fetch.go index 2d5bb7f2..7d1bfcf1 100644 --- a/worker/imap/fetch.go +++ b/worker/imap/fetch.go @@ -40,7 +40,11 @@ func (imapw *IMAPWorker) handleFetchMessageBodyPart( imapw.worker.Logger.Printf("Fetching message part") section := &imap.BodySectionName{} section.Path = msg.Part - items := []imap.FetchItem{section.FetchItem()} + items := []imap.FetchItem{ + imap.FetchFlags, + imap.FetchUid, + section.FetchItem(), + } uids := imap.SeqSet{} uids.AddNum(msg.Uid) imapw.handleFetchMessages(msg, &uids, items, section) @@ -51,7 +55,11 @@ func (imapw *IMAPWorker) handleFetchFullMessages( imapw.worker.Logger.Printf("Fetching full messages") section := &imap.BodySectionName{} - items := []imap.FetchItem{section.FetchItem()} + items := []imap.FetchItem{ + imap.FetchFlags, + imap.FetchUid, + section.FetchItem(), + } imapw.handleFetchMessages(msg, &msg.Uids, items, section) } @@ -89,6 +97,12 @@ func (imapw *IMAPWorker) handleFetchMessages( Reader: reader, Uid: _msg.Uid, }, nil) + // Update flags (to mark message as read) + imapw.worker.PostMessage(&types.MessageInfo{ + Message: types.RespondTo(msg), + Flags: _msg.Flags, + Uid: _msg.Uid, + }, nil) case *types.FetchMessageBodyPart: reader := _msg.GetBody(section) imapw.worker.PostMessage(&types.MessageBodyPart{ @@ -96,6 +110,12 @@ func (imapw *IMAPWorker) handleFetchMessages( Reader: reader, Uid: _msg.Uid, }, nil) + // Update flags (to mark message as read) + imapw.worker.PostMessage(&types.MessageInfo{ + Message: types.RespondTo(msg), + Flags: _msg.Flags, + Uid: _msg.Uid, + }, nil) } } done <- nil diff --git a/worker/imap/worker.go b/worker/imap/worker.go index f71a950d..373072b1 100644 --- a/worker/imap/worker.go +++ b/worker/imap/worker.go @@ -171,6 +171,18 @@ func (w *IMAPWorker) handleImapUpdate(update client.Update) { Recent: int(status.Recent), Unseen: int(status.Unseen), }, nil) + case *client.MessageUpdate: + msg := update.Message + if msg.Uid == 0 { + msg.Uid = w.seqMap[msg.SeqNum-1] + } + w.worker.PostMessage(&types.MessageInfo{ + BodyStructure: msg.BodyStructure, + Envelope: msg.Envelope, + Flags: msg.Flags, + InternalDate: msg.InternalDate, + Uid: msg.Uid, + }, nil) case *client.ExpungeUpdate: i := update.SeqNum - 1 uid := w.seqMap[i] |