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