aboutsummaryrefslogtreecommitdiffstats
path: root/commands/account/search.go
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-07-05 14:48:40 -0500
committerRobin Jarry <robin@jarry.cc>2022-07-10 21:15:12 +0200
commitc2f4404fca15be37228545b1893f5fa335168337 (patch)
tree2bfc788a7e38510f1d5057c4b47d2460a548cb44 /commands/account/search.go
parentccd042889f6d8aa78b70c01395ef69aec48ac48c (diff)
downloadaerc-c2f4404fca15be37228545b1893f5fa335168337.tar.gz
threading: enable filtering of server-side threads
This patch enables the filtering of a threaded view which uses server-built threads. Filtering is done server-side, in order to preserve the use of server-built threads. In adding this feature, the filtering of notmuch folders was brought up to feature parity with the other workers. The filters function the same (ie: they can be stacked). The notmuch filters, however, still use notmuch syntax for the filtering. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'commands/account/search.go')
-rw-r--r--commands/account/search.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/commands/account/search.go b/commands/account/search.go
index 771c850f..7cae227f 100644
--- a/commands/account/search.go
+++ b/commands/account/search.go
@@ -6,6 +6,7 @@ import (
"git.sr.ht/~rjarry/aerc/lib/statusline"
"git.sr.ht/~rjarry/aerc/widgets"
+ "git.sr.ht/~rjarry/aerc/worker/types"
)
type SearchFilter struct{}
@@ -32,27 +33,29 @@ func (SearchFilter) Execute(aerc *widgets.Aerc, args []string) error {
return errors.New("Cannot perform action. Messages still loading")
}
- var cb func([]uint32)
if args[0] == "filter" {
if len(args[1:]) == 0 {
return Clear{}.Execute(aerc, []string{"clear"})
}
acct.SetStatus(statusline.FilterActivity("Filtering..."), statusline.Search(""))
- cb = func(uids []uint32) {
- acct.SetStatus(statusline.FilterResult(strings.Join(args, " ")))
- acct.Logger().Printf("Filter results: %v", uids)
- store.ApplyFilter(uids)
+ store.SetFilter(args[1:])
+ cb := func(msg types.WorkerMessage) {
+ if _, ok := msg.(*types.Done); ok {
+ acct.SetStatus(statusline.FilterResult(strings.Join(args, " ")))
+ acct.Logger().Printf("Filter results: %v", store.Uids())
+ }
}
+ store.Sort(nil, cb)
} else {
acct.SetStatus(statusline.Search("Searching..."))
- cb = func(uids []uint32) {
+ cb := func(uids []uint32) {
acct.SetStatus(statusline.Search(strings.Join(args, " ")))
acct.Logger().Printf("Search results: %v", uids)
store.ApplySearch(uids)
// TODO: Remove when stores have multiple OnUpdate handlers
acct.Messages().Invalidate()
}
+ store.Search(args, cb)
}
- store.Search(args, cb)
return nil
}