Update our message flags when server updates them

This commit is contained in:
Drew DeVault 2019-06-09 14:55:04 -04:00
parent d63653ecde
commit 05f00f0153
3 changed files with 35 additions and 5 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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]