aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2022-03-20 09:47:52 +0100
committerRobin Jarry <robin@jarry.cc>2022-03-20 10:00:50 +0100
commit9f4da4de0c9b3a330a8c7032e285117cfa5448dc (patch)
tree71871187b2bcef9a63b92f9a65a2d6cacb1180ce /lib
parent7d2b0f579dd307fe541401efcf79d318367ad5e2 (diff)
downloadaerc-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>
Diffstat (limited to 'lib')
-rw-r--r--lib/msgstore.go11
1 files changed, 11 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) {