1package account
2
3import (
4	"errors"
5
6	"git.sr.ht/~sircmpwn/aerc/widgets"
7)
8
9type SearchFilter struct{}
10
11func init() {
12	register(SearchFilter{})
13}
14
15func (SearchFilter) Aliases() []string {
16	return []string{"search", "filter"}
17}
18
19func (SearchFilter) Complete(aerc *widgets.Aerc, args []string) []string {
20	return nil
21}
22
23func (SearchFilter) Execute(aerc *widgets.Aerc, args []string) error {
24	acct := aerc.SelectedAccount()
25	if acct == nil {
26		return errors.New("No account selected")
27	}
28	store := acct.Store()
29	if store == nil {
30		return errors.New("Cannot perform action. Messages still loading")
31	}
32
33	var cb func([]uint32)
34	if args[0] == "filter" {
35		aerc.SetStatus("Filtering...")
36		cb = func(uids []uint32) {
37			aerc.SetStatus("Filter complete.")
38			acct.Logger().Printf("Filter results: %v", uids)
39			store.ApplyFilter(uids)
40		}
41	} else {
42		aerc.SetStatus("Searching...")
43		cb = func(uids []uint32) {
44			aerc.SetStatus("Search complete.")
45			acct.Logger().Printf("Search results: %v", uids)
46			store.ApplySearch(uids)
47			// TODO: Remove when stores have multiple OnUpdate handlers
48			acct.Messages().Scroll()
49		}
50	}
51	store.Search(args, cb)
52	return nil
53}
54