about summary refs log tree commit diff stats
path: root/worker/imap
diff options
context:
space:
mode:
authorGalen Abell <galen@galenabell.com>2020-03-03 08:45:06 -0500
committerReto Brunner <reto@labrat.space>2020-03-03 20:08:37 +0100
commit6ff3c7a1ba680506d77fc1fe8dfbf5b804a3fea7 (patch)
tree093c49f4dc7fbc80adedb5f6c05a76bc697e44b6 /worker/imap
parent68f179021d304d6edf939ecf5fc7d0d073b16152 (diff)
downloadaerc-6ff3c7a1ba680506d77fc1fe8dfbf5b804a3fea7.tar.gz
Mark sent messages as "seen" in maildir
- Add maildir flags to complement a messages imap flags
- Set the "seen" flag on sent messages when using the maildir backend
- Cleanup AppendMessage interface to use models.Flag for both IMAP and
  maildir
Diffstat (limited to 'worker/imap')
-rw-r--r--worker/imap/fetch.go6
-rw-r--r--worker/imap/imap.go24
-rw-r--r--worker/imap/movecopy.go2
-rw-r--r--worker/imap/worker.go2
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,
 			},