diff options
Diffstat (limited to 'worker/imap')
-rw-r--r-- | worker/imap/fetch.go | 6 | ||||
-rw-r--r-- | worker/imap/imap.go | 24 | ||||
-rw-r--r-- | worker/imap/movecopy.go | 2 | ||||
-rw-r--r-- | worker/imap/worker.go | 2 |
4 files changed, 26 insertions, 8 deletions
diff --git a/worker/imap/fetch.go b/worker/imap/fetch.go index bf60aa9..f131117 100644 --- a/worker/imap/fetch.go +++ b/worker/imap/fetch.go @@ -91,7 +91,7 @@ func (imapw *IMAPWorker) handleFetchMessages( Info: &models.MessageInfo{ BodyStructure: translateBodyStructure(_msg.BodyStructure), Envelope: translateEnvelope(_msg.Envelope), - Flags: translateFlags(_msg.Flags), + Flags: translateImapFlags(_msg.Flags), InternalDate: _msg.InternalDate, RFC822Headers: header, Uid: _msg.Uid, @@ -115,7 +115,7 @@ func (imapw *IMAPWorker) handleFetchMessages( imapw.worker.PostMessage(&types.MessageInfo{ Message: types.RespondTo(msg), Info: &models.MessageInfo{ - Flags: translateFlags(_msg.Flags), + Flags: translateImapFlags(_msg.Flags), Uid: _msg.Uid, }, }, nil) @@ -136,7 +136,7 @@ func (imapw *IMAPWorker) handleFetchMessages( imapw.worker.PostMessage(&types.MessageInfo{ Message: types.RespondTo(msg), Info: &models.MessageInfo{ - Flags: translateFlags(_msg.Flags), + Flags: translateImapFlags(_msg.Flags), Uid: _msg.Uid, }, }, nil) diff --git a/worker/imap/imap.go b/worker/imap/imap.go index b0aacf6..fdcbc38 100644 --- a/worker/imap/imap.go +++ b/worker/imap/imap.go @@ -89,7 +89,7 @@ func translateAddresses(addrs []*imap.Address) []*models.Address { return converted } -var flagMap = map[string]models.Flag{ +var imapToFlag = map[string]models.Flag{ imap.SeenFlag: models.SeenFlag, imap.RecentFlag: models.RecentFlag, imap.AnsweredFlag: models.AnsweredFlag, @@ -97,12 +97,30 @@ var flagMap = map[string]models.Flag{ imap.FlaggedFlag: models.FlaggedFlag, } -func translateFlags(imapFlags []string) []models.Flag { +var flagToImap = map[models.Flag]string{ + models.SeenFlag: imap.SeenFlag, + models.RecentFlag: imap.RecentFlag, + models.AnsweredFlag: imap.AnsweredFlag, + models.DeletedFlag: imap.DeletedFlag, + models.FlaggedFlag: imap.FlaggedFlag, +} + +func translateImapFlags(imapFlags []string) []models.Flag { var flags []models.Flag for _, imapFlag := range imapFlags { - if flag, ok := flagMap[imapFlag]; ok { + if flag, ok := imapToFlag[imapFlag]; ok { flags = append(flags, flag) } } return flags } + +func translateFlags(flags []models.Flag) []string { + var imapFlags []string + for _, flag := range flags { + if imapFlag, ok := flagToImap[flag]; ok { + imapFlags = append(imapFlags, imapFlag) + } + } + return imapFlags +} diff --git a/worker/imap/movecopy.go b/worker/imap/movecopy.go index b01dab7..a53c7d4 100644 --- a/worker/imap/movecopy.go +++ b/worker/imap/movecopy.go @@ -28,7 +28,7 @@ func (m appendLiteral) Len() int { } func (imapw *IMAPWorker) handleAppendMessage(msg *types.AppendMessage) { - if err := imapw.client.Append(msg.Destination, msg.Flags, msg.Date, + if err := imapw.client.Append(msg.Destination, translateFlags(msg.Flags), msg.Date, &appendLiteral{ Reader: msg.Reader, Length: msg.Length, diff --git a/worker/imap/worker.go b/worker/imap/worker.go index ddd95b6..45a2269 100644 --- a/worker/imap/worker.go +++ b/worker/imap/worker.go @@ -222,7 +222,7 @@ func (w *IMAPWorker) handleImapUpdate(update client.Update) { Info: &models.MessageInfo{ BodyStructure: translateBodyStructure(msg.BodyStructure), Envelope: translateEnvelope(msg.Envelope), - Flags: translateFlags(msg.Flags), + Flags: translateImapFlags(msg.Flags), InternalDate: msg.InternalDate, Uid: msg.Uid, }, |