aboutsummaryrefslogtreecommitdiffstats
path: root/worker/mbox
diff options
context:
space:
mode:
Diffstat (limited to 'worker/mbox')
-rw-r--r--worker/mbox/io.go2
-rw-r--r--worker/mbox/models.go27
-rw-r--r--worker/mbox/worker.go5
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)