diff --git a/lib/msgstore.go b/lib/msgstore.go index 817a7b3..0ded01f 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 f4cea70..5eee7ed 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() }