summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2022-05-27 10:04:20 +0200
committerRobin Jarry <robin@jarry.cc>2022-05-31 14:32:45 +0200
commit30d57889741cfa8284eec9b32b29144fe01002a2 (patch)
treed1a48432056e01b77cab75f6a774a2dc04cba7a8
parent461726802ef10ff3a33f6f118816c2c355df55a5 (diff)
downloadaerc-30d57889741cfa8284eec9b32b29144fe01002a2.zip
store: clean marked messages
Clean marked messages after new uids are fetched. Commit 5c5158b3 ("store: remove callbacks on error") removed side effects in the message store after a longer suspend period but neglected to remove marked zombie messages. References: https://todo.sr.ht/~rjarry/aerc/28 Co-authored-by: inwit <inwit@sindominio.net> Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r--lib/msgstore.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go
index 908f125..dc18137 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -208,6 +208,7 @@ func (store *MessageStore) Update(msg types.WorkerMessage) {
store.Messages = newMap
store.uids = msg.Uids
sort.SortBy(store.filtered, store.uids)
+ store.checkMark()
update = true
case *types.DirectoryThreaded:
var uids []uint32
@@ -228,6 +229,7 @@ func (store *MessageStore) Update(msg types.WorkerMessage) {
}
store.Messages = newMap
store.uids = uids
+ store.checkMark()
store.Threads = msg.Threads
update = true
case *types.MessageInfo:
@@ -572,6 +574,22 @@ func (store *MessageStore) resetMark() {
store.marked = make(map[uint32]struct{})
}
+// checkMark checks that no stale uids remain marked
+func (store *MessageStore) checkMark() {
+ for mark := range store.marked {
+ present := false
+ for _, uid := range store.uids {
+ if mark == uid {
+ present = true
+ break
+ }
+ }
+ if !present {
+ delete(store.marked, mark)
+ }
+ }
+}
+
//IsMarked checks whether a MessageInfo has been marked
func (store *MessageStore) IsMarked(uid uint32) bool {
_, marked := store.marked[uid]