diff options
Diffstat (limited to 'worker')
-rw-r--r-- | worker/imap/imap.go | 2 | ||||
-rw-r--r-- | worker/jmap/jmap.go | 5 | ||||
-rw-r--r-- | worker/lib/maildir.go | 4 | ||||
-rw-r--r-- | worker/notmuch/notmuch.go | 3 | ||||
-rw-r--r-- | worker/notmuch/worker.go | 27 |
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) +} |