diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-03-20 09:47:52 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-03-20 10:00:50 +0100 |
commit | 9f4da4de0c9b3a330a8c7032e285117cfa5448dc (patch) | |
tree | 71871187b2bcef9a63b92f9a65a2d6cacb1180ce | |
parent | 7d2b0f579dd307fe541401efcf79d318367ad5e2 (diff) | |
download | aerc-9f4da4de0c9b3a330a8c7032e285117cfa5448dc.tar.gz |
msglist: update message counter upon filter change
Update message counter in msglist when the filter is changed (either set or
cleared in the msgstore).
When we apply a filter, we change the number of uids in the message
store. This can unintentionally trigger the storeUpdate() function of
the msglist which checks the number of uids for new messages and
advances the pointer by the difference in the number of messages. This
can be avoided when we update the message counter upon changing the
filter.
Fixes: https://todo.sr.ht/~rjarry/aerc/23
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | lib/msgstore.go | 11 | ||||
-rw-r--r-- | widgets/msglist.go | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go index 817a7b32..0ded01fd 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -43,6 +43,7 @@ type MessageStore struct { // Map of uids we've asked the worker to fetch onUpdate func(store *MessageStore) // TODO: multiple onUpdate handlers + onFilterChange func(store *MessageStore) onUpdateDirs func() pendingBodies map[uint32]interface{} pendingHeaders map[uint32]interface{} @@ -323,6 +324,10 @@ func (store *MessageStore) OnUpdate(fn func(store *MessageStore)) { store.onUpdate = fn } +func (store *MessageStore) OnFilterChange(fn func(store *MessageStore)) { + store.onFilterChange = fn +} + func (store *MessageStore) OnUpdateDirs(fn func()) { store.onUpdateDirs = fn } @@ -655,6 +660,9 @@ func (store *MessageStore) ApplyFilter(results []uint32) { store.results = nil store.filtered = results store.filter = true + if store.onFilterChange != nil { + store.onFilterChange(store) + } store.update() // any marking is now invalid // TODO: could save that probably @@ -668,6 +676,9 @@ func (store *MessageStore) ApplyClear() { if store.BuildThreads() { store.runThreadBuilder() } + if store.onFilterChange != nil { + store.onFilterChange(store) + } } func (store *MessageStore) nextPrevResult(delta int) { diff --git a/widgets/msglist.go b/widgets/msglist.go index f4cea709..5eee7ed4 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -367,6 +367,12 @@ func (ml *MessageList) SetStore(store *lib.MessageStore) { ml.spinner.Stop() ml.nmsgs = len(store.Uids()) store.OnUpdate(ml.storeUpdate) + store.OnFilterChange(func(store *lib.MessageStore) { + if ml.Store() != store { + return + } + ml.nmsgs = len(store.Uids()) + }) } else { ml.spinner.Start() } |