aboutsummaryrefslogtreecommitdiffstats
path: root/worker
diff options
context:
space:
mode:
Diffstat (limited to 'worker')
-rw-r--r--worker/imap/imap.go2
-rw-r--r--worker/jmap/jmap.go5
-rw-r--r--worker/lib/maildir.go4
-rw-r--r--worker/notmuch/notmuch.go3
-rw-r--r--worker/notmuch/worker.go27
5 files changed, 38 insertions, 3 deletions
diff --git a/worker/imap/imap.go b/worker/imap/imap.go
index 82ee2e2e..fbdcb2b9 100644
--- a/worker/imap/imap.go
+++ b/worker/imap/imap.go
@@ -85,6 +85,7 @@ var imapToFlag = map[string]models.Flags{
imap.AnsweredFlag: models.AnsweredFlag,
imap.DeletedFlag: models.DeletedFlag,
imap.FlaggedFlag: models.FlaggedFlag,
+ imap.DraftFlag: models.DraftFlag,
}
var flagToImap = map[models.Flags]string{
@@ -93,6 +94,7 @@ var flagToImap = map[models.Flags]string{
models.AnsweredFlag: imap.AnsweredFlag,
models.DeletedFlag: imap.DeletedFlag,
models.FlaggedFlag: imap.FlaggedFlag,
+ models.DraftFlag: imap.DraftFlag,
}
func translateImapFlags(imapFlags []string) models.Flags {
diff --git a/worker/jmap/jmap.go b/worker/jmap/jmap.go
index 8012b6e4..bb0f75f9 100644
--- a/worker/jmap/jmap.go
+++ b/worker/jmap/jmap.go
@@ -67,6 +67,9 @@ func flagsToKeywords(flags models.Flags) map[string]bool {
if flags.Has(models.FlaggedFlag) {
kw["$flagged"] = true
}
+ if flags.Has(models.DraftFlag) {
+ kw["$draft"] = true
+ }
return kw
}
@@ -81,6 +84,8 @@ func keywordsToFlags(kw map[string]bool) models.Flags {
f |= models.AnsweredFlag
case "$flagged":
f |= models.FlaggedFlag
+ case "$draft":
+ f |= models.DraftFlag
}
}
}
diff --git a/worker/lib/maildir.go b/worker/lib/maildir.go
index 43d3b820..a4a0ecd5 100644
--- a/worker/lib/maildir.go
+++ b/worker/lib/maildir.go
@@ -118,7 +118,7 @@ var MaildirToFlag = map[maildir.Flag]models.Flags{
maildir.FlagSeen: models.SeenFlag,
maildir.FlagTrashed: models.DeletedFlag,
maildir.FlagFlagged: models.FlaggedFlag,
- // maildir.FlagDraft Flag = 'D'
+ maildir.FlagDraft: models.DraftFlag,
// maildir.FlagPassed Flag = 'P'
}
@@ -127,7 +127,7 @@ var FlagToMaildir = map[models.Flags]maildir.Flag{
models.SeenFlag: maildir.FlagSeen,
models.DeletedFlag: maildir.FlagTrashed,
models.FlaggedFlag: maildir.FlagFlagged,
- // maildir.FlagDraft Flag = 'D'
+ models.DraftFlag: maildir.FlagDraft,
// maildir.FlagPassed Flag = 'P'
}
diff --git a/worker/notmuch/notmuch.go b/worker/notmuch/notmuch.go
index 5610cac0..1d064fd2 100644
--- a/worker/notmuch/notmuch.go
+++ b/worker/notmuch/notmuch.go
@@ -8,17 +8,20 @@ import "git.sr.ht/~rjarry/aerc/models"
var tagToFlag = map[string]models.Flags{
"unread": models.SeenFlag,
"replied": models.AnsweredFlag,
+ "draft": models.DraftFlag,
"flagged": models.FlaggedFlag,
}
var flagToTag = map[models.Flags]string{
models.SeenFlag: "unread",
models.AnsweredFlag: "replied",
+ models.DraftFlag: "draft",
models.FlaggedFlag: "flagged",
}
var flagToInvert = map[models.Flags]bool{
models.SeenFlag: true,
models.AnsweredFlag: false,
+ models.DraftFlag: false,
models.FlaggedFlag: false,
}
diff --git a/worker/notmuch/worker.go b/worker/notmuch/worker.go
index 374a20b7..80a8d720 100644
--- a/worker/notmuch/worker.go
+++ b/worker/notmuch/worker.go
@@ -894,9 +894,16 @@ func (w *worker) handleAppendMessage(msg *types.AppendMessage) error {
return err
}
writer.Close()
- if _, err := w.db.IndexFile(filename); err != nil {
+ id, err := w.db.IndexFile(filename)
+ if err != nil {
return err
}
+
+ err = w.addFlags(id, msg.Flags)
+ if err != nil {
+ return err
+ }
+
w.w.PostMessage(&types.DirectoryInfo{
Info: w.getDirectoryInfo(w.currentQueryName, w.query),
}, nil)
@@ -973,3 +980,21 @@ func (w *worker) processNewMaildirFiles(dir string) error {
return nil
}
+
+func (w *worker) addFlags(id string, flags models.Flags) error {
+ addTags := []string{}
+ removeTags := []string{}
+ for flag, tag := range flagToTag {
+ if !flags.Has(flag) {
+ continue
+ }
+
+ if flagToInvert[flag] {
+ removeTags = append(removeTags, tag)
+ } else {
+ addTags = append(addTags, tag)
+ }
+ }
+
+ return w.db.MsgModifyTags(id, addTags, removeTags)
+}