aboutsummaryrefslogtreecommitdiffstats
path: root/worker/notmuch
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2022-12-21 11:31:04 +0100
committerRobin Jarry <robin@jarry.cc>2023-01-04 22:57:31 +0100
commit5677f93ff8e0f212be112a110fcfe09663c84f98 (patch)
tree9f47f430b312d1f0dc1acdd3735cfd76ad21e0f0 /worker/notmuch
parent36fded03e762da97edde61559c8bf60d5749d6a2 (diff)
downloadaerc-5677f93ff8e0f212be112a110fcfe09663c84f98.tar.gz
model: change flags array to bitmask
Using a list of integers is not optimal. Use a bit mask instead. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'worker/notmuch')
-rw-r--r--worker/notmuch/message.go20
-rw-r--r--worker/notmuch/worker.go5
2 files changed, 10 insertions, 15 deletions
diff --git a/worker/notmuch/message.go b/worker/notmuch/message.go
index 0fc85b00..28731d3d 100644
--- a/worker/notmuch/message.go
+++ b/worker/notmuch/message.go
@@ -58,7 +58,7 @@ func (m *Message) NewBodyPartReader(requestedParts []int) (io.Reader, error) {
// SetFlag adds or removes a flag from the message.
// Notmuch doesn't support all the flags, and for those this errors.
-func (m *Message) SetFlag(flag models.Flag, enable bool) error {
+func (m *Message) SetFlag(flag models.Flags, enable bool) error {
// Translate the flag into a notmuch tag, ignoring no-op flags.
var tag string
switch flag {
@@ -129,28 +129,22 @@ func (m *Message) Labels() ([]string, error) {
return m.Tags()
}
-func (m *Message) ModelFlags() ([]models.Flag, error) {
- var flags []models.Flag
- seen := true
+func (m *Message) ModelFlags() (models.Flags, error) {
+ var flags models.Flags = models.SeenFlag
tags, err := m.Tags()
if err != nil {
- return nil, err
+ return 0, err
}
for _, tag := range tags {
switch tag {
case "replied":
- flags = append(flags, models.AnsweredFlag)
+ flags |= models.AnsweredFlag
case "flagged":
- flags = append(flags, models.FlaggedFlag)
+ flags |= models.FlaggedFlag
case "unread":
- seen = false
- default:
- continue
+ flags &^= models.SeenFlag
}
}
- if seen {
- flags = append(flags, models.SeenFlag)
- }
return flags, nil
}
diff --git a/worker/notmuch/worker.go b/worker/notmuch/worker.go
index a4f5b5c8..6d8e46d2 100644
--- a/worker/notmuch/worker.go
+++ b/worker/notmuch/worker.go
@@ -477,8 +477,9 @@ func (w *worker) handleFlagMessages(msg *types.FlagMessages) error {
w.err(msg, err)
continue
}
- if err := m.SetFlag(msg.Flag, msg.Enable); err != nil {
- log.Errorf("could not set flag %v as %t for message: %v", msg.Flag, msg.Enable, err)
+ if err := m.SetFlag(msg.Flags, msg.Enable); err != nil {
+ log.Errorf("could not set flag %v as %t for message: %v",
+ msg.Flags, msg.Enable, err)
w.err(msg, err)
continue
}