diff options
author | Robin Jarry <robin@jarry.cc> | 2022-12-21 11:31:04 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-01-04 22:57:31 +0100 |
commit | 5677f93ff8e0f212be112a110fcfe09663c84f98 (patch) | |
tree | 9f47f430b312d1f0dc1acdd3735cfd76ad21e0f0 /worker/notmuch | |
parent | 36fded03e762da97edde61559c8bf60d5749d6a2 (diff) | |
download | aerc-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.go | 20 | ||||
-rw-r--r-- | worker/notmuch/worker.go | 5 |
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 } |