about summary refs log tree commit diff stats
path: root/worker/imap
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2020-01-24 12:10:00 +0100
committerDrew DeVault <sir@cmpwn.com>2020-01-24 10:51:09 -0500
commitdf5d9a3ec7564f0d95e3f92afc0e59588de3c4ce (patch)
treefe9f8549e391fc8fc4594547477ac87b4bc6543a /worker/imap
parentb2fa5a16f52741a6f7f6e5f33561457d702dc31d (diff)
downloadaerc-df5d9a3ec7564f0d95e3f92afc0e59588de3c4ce.tar.gz
imap: emit messageinfo when changing read state.
We need to emit the changed msgInfo whenever we modify the state
Diffstat (limited to 'worker/imap')
-rw-r--r--worker/imap/flags.go19
1 files changed, 17 insertions, 2 deletions
diff --git a/worker/imap/flags.go b/worker/imap/flags.go
index 57211a6..17c9393 100644
--- a/worker/imap/flags.go
+++ b/worker/imap/flags.go
@@ -1,6 +1,7 @@
 package imap
 
 import (
+	"fmt"
 	"github.com/emersion/go-imap"
 
 	"git.sr.ht/~sircmpwn/aerc/worker/types"
@@ -51,12 +52,26 @@ func (imapw *IMAPWorker) handleReadMessages(msg *types.ReadMessages) {
 		flags = []interface{}{imap.SeenFlag}
 	}
 	uids := toSeqSet(msg.Uids)
-	if err := imapw.client.UidStore(uids, item, flags, nil); err != nil {
+	emitErr := func(err error) {
 		imapw.worker.PostMessage(&types.Error{
 			Message: types.RespondTo(msg),
 			Error:   err,
 		}, nil)
+	}
+	if err := imapw.client.UidStore(uids, item, flags, nil); err != nil {
+		emitErr(err)
 		return
 	}
-	imapw.worker.PostMessage(&types.Done{types.RespondTo(msg)}, nil)
+	imapw.worker.PostAction(&types.FetchMessageHeaders{
+		Uids: msg.Uids,
+	}, func(_msg types.WorkerMessage) {
+		switch m := _msg.(type) {
+		case *types.Error:
+			err := fmt.Errorf("handleReadMessages: %v", m.Error)
+			imapw.worker.Logger.Printf("could not fetch headers: %s", err)
+			emitErr(err)
+		case *types.Done:
+			imapw.worker.PostMessage(&types.Done{types.RespondTo(msg)}, nil)
+		}
+	})
 }