~rjarry/aerc

30d57889741cfa8284eec9b32b29144fe01002a2 — Koni Marti 6 months ago 4617268
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>
1 files changed, 18 insertions(+), 0 deletions(-)

M lib/msgstore.go
M lib/msgstore.go => lib/msgstore.go +18 -0
@@ 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]