From 91de6e001ec536697fa736359d9f36fe9fdf9d58 Mon Sep 17 00:00:00 2001 From: Leander Beernaert Date: Thu, 6 Jul 2023 09:39:40 +0200 Subject: [PATCH] fix(GODT-2763): Missing Answered flag on Sync and Message Create Ensure we are using the same flag conversion code for all IMAP updates. --- internal/user/events.go | 22 ---------------------- internal/user/imap.go | 36 +++++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/internal/user/events.go b/internal/user/events.go index 5509f000..6876aef6 100644 --- a/internal/user/events.go +++ b/internal/user/events.go @@ -851,25 +851,3 @@ func safePublishMessageUpdate(user *User, addressID string, update imap.Update) return true, nil } - -func buildFlagSetFromMessageMetadata(message proton.MessageMetadata) imap.FlagSet { - flags := imap.NewFlagSet() - - if message.Seen() { - flags.AddToSelf(imap.FlagSeen) - } - - if message.Starred() { - flags.AddToSelf(imap.FlagFlagged) - } - - if message.IsDraft() { - flags.AddToSelf(imap.FlagDraft) - } - - if message.IsRepliedAll == true || message.IsReplied == true { //nolint: gosimple - flags.AddToSelf(imap.FlagAnswered) - } - - return flags -} diff --git a/internal/user/imap.go b/internal/user/imap.go index 87afa3f5..32bdf34a 100644 --- a/internal/user/imap.go +++ b/internal/user/imap.go @@ -608,19 +608,7 @@ func (conn *imapConnector) importMessage( } func toIMAPMessage(message proton.MessageMetadata) imap.Message { - flags := imap.NewFlagSet() - - if !message.Unread { - flags = flags.Add(imap.FlagSeen) - } - - if slices.Contains(message.LabelIDs, proton.StarredLabel) { - flags = flags.Add(imap.FlagFlagged) - } - - if slices.Contains(message.LabelIDs, proton.DraftsLabel) { - flags = flags.Add(imap.FlagDraft) - } + flags := buildFlagSetFromMessageMetadata(message) var date time.Time @@ -713,3 +701,25 @@ func toIMAPMailbox(label proton.Label, flags, permFlags, attrs imap.FlagSet) ima func isAllMailOrScheduled(mailboxID imap.MailboxID) bool { return (mailboxID == proton.AllMailLabel) || (mailboxID == proton.AllScheduledLabel) } + +func buildFlagSetFromMessageMetadata(message proton.MessageMetadata) imap.FlagSet { + flags := imap.NewFlagSet() + + if message.Seen() { + flags.AddToSelf(imap.FlagSeen) + } + + if message.Starred() { + flags.AddToSelf(imap.FlagFlagged) + } + + if message.IsDraft() { + flags.AddToSelf(imap.FlagDraft) + } + + if message.IsRepliedAll == true || message.IsReplied == true { //nolint: gosimple + flags.AddToSelf(imap.FlagAnswered) + } + + return flags +}