diff options
Diffstat (limited to 'worker/mbox')
-rw-r--r-- | worker/mbox/io.go | 2 | ||||
-rw-r--r-- | worker/mbox/models.go | 27 | ||||
-rw-r--r-- | worker/mbox/worker.go | 5 |
3 files changed, 12 insertions, 22 deletions
diff --git a/worker/mbox/io.go b/worker/mbox/io.go index 31a906cc..2fe39813 100644 --- a/worker/mbox/io.go +++ b/worker/mbox/io.go @@ -28,7 +28,7 @@ func Read(r io.Reader) ([]lib.RawMessage, error) { } messages = append(messages, &message{ - uid: uid, flags: []models.Flag{models.SeenFlag}, content: content, + uid: uid, flags: models.SeenFlag, content: content, }) uid++ diff --git a/worker/mbox/models.go b/worker/mbox/models.go index eec73379..3af93a84 100644 --- a/worker/mbox/models.go +++ b/worker/mbox/models.go @@ -148,7 +148,7 @@ func (f *container) newUid() (next uint32) { return } -func (f *container) Append(r io.Reader, flags []models.Flag) error { +func (f *container) Append(r io.Reader, flags models.Flags) error { data, err := io.ReadAll(r) if err != nil { return err @@ -164,7 +164,7 @@ func (f *container) Append(r io.Reader, flags []models.Flag) error { // message implements the lib.RawMessage interface type message struct { uid uint32 - flags []models.Flag + flags models.Flags content []byte } @@ -172,7 +172,7 @@ func (m *message) NewReader() (io.ReadCloser, error) { return io.NopCloser(bytes.NewReader(m.content)), nil } -func (m *message) ModelFlags() ([]models.Flag, error) { +func (m *message) ModelFlags() (models.Flags, error) { return m.flags, nil } @@ -184,22 +184,11 @@ func (m *message) UID() uint32 { return m.uid } -func (m *message) SetFlag(flag models.Flag, state bool) error { - flagSet := make(map[models.Flag]bool) - flags, err := m.ModelFlags() - if err != nil { - return err - } - for _, f := range flags { - flagSet[f] = true - } - flagSet[flag] = state - newFlags := make([]models.Flag, 0) - for flag, isSet := range flagSet { - if isSet { - newFlags = append(newFlags, flag) - } +func (m *message) SetFlag(flag models.Flags, state bool) error { + if state { + m.flags |= flag + } else { + m.flags &^= flag } - m.flags = newFlags return nil } diff --git a/worker/mbox/worker.go b/worker/mbox/worker.go index fcf1917d..c2cf9ecb 100644 --- a/worker/mbox/worker.go +++ b/worker/mbox/worker.go @@ -254,8 +254,9 @@ func (w *mboxWorker) handleMessage(msg types.WorkerMessage) error { log.Errorf("could not get message: %v", err) continue } - if err := m.(*message).SetFlag(msg.Flag, msg.Enable); err != nil { - log.Errorf("could change flag %v to %t on message: %v", msg.Flag, msg.Enable, err) + if err := m.(*message).SetFlag(msg.Flags, msg.Enable); err != nil { + log.Errorf("could not change flag %v to %t on message: %v", + msg.Flags, msg.Enable, err) continue } info, err := lib.MessageInfo(m) |