Implement :filter, :clear

Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
This commit is contained in:
Kevin Kuehler 2019-07-17 00:35:50 -07:00 committed by Drew DeVault
commit f81e4bd41c
8 changed files with 134 additions and 41 deletions
commands/account

View file

@ -34,14 +34,20 @@ func (_ ChangeFolder) Execute(aerc *widgets.Aerc, args []string) error {
if acct == nil {
return errors.New("No account selected")
}
store := acct.Store()
if store == nil {
return errors.New("Cannot perform action. Messages still loading")
}
previous := acct.Directories().Selected()
if args[1] == "-" {
if dir, ok := history[acct.Name()]; ok {
store.ApplyClear()
acct.Directories().Select(dir)
} else {
return errors.New("No previous folder to return to")
}
} else {
store.ApplyClear()
acct.Directories().Select(args[1])
}
history[acct.Name()] = previous

34
commands/account/clear.go Normal file
View file

@ -0,0 +1,34 @@
package account
import (
"errors"
"git.sr.ht/~sircmpwn/aerc/widgets"
)
type Clear struct{}
func init() {
register(Clear{})
}
func (_ Clear) Aliases() []string {
return []string{"clear"}
}
func (_ Clear) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (_ Clear) Execute(aerc *widgets.Aerc, args []string) error {
acct := aerc.SelectedAccount()
if acct == nil {
return errors.New("No account selected")
}
store := acct.Store()
if store == nil {
return errors.New("Cannot perform action. Messages still loading")
}
store.ApplyClear()
aerc.SetStatus("Clear complete.")
return nil
}

View file

@ -16,7 +16,7 @@ func init() {
}
func (_ SearchFilter) Aliases() []string {
return []string{"search"}
return []string{"search", "filter"}
}
func (_ SearchFilter) Complete(aerc *widgets.Aerc, args []string) []string {
@ -54,13 +54,25 @@ func (_ SearchFilter) Execute(aerc *widgets.Aerc, args []string) error {
if store == nil {
return errors.New("Cannot perform action. Messages still loading")
}
aerc.SetStatus("Searching...")
store.Search(criteria, func(uids []uint32) {
aerc.SetStatus("Search complete.")
acct.Logger().Printf("Search results: %v", uids)
store.ApplySearch(uids)
// TODO: Remove when stores have multiple OnUpdate handlers
acct.Messages().Scroll()
})
var cb func([]uint32)
if args[0] == "filter" {
aerc.SetStatus("Filtering...")
cb = func(uids []uint32) {
aerc.SetStatus("Filter complete.")
acct.Logger().Printf("Filter results: %v", uids)
store.ApplyFilter(uids)
}
} else {
aerc.SetStatus("Searching...")
cb = func(uids []uint32) {
aerc.SetStatus("Search complete.")
acct.Logger().Printf("Search results: %v", uids)
store.ApplySearch(uids)
// TODO: Remove when stores have multiple OnUpdate handlers
acct.Messages().Scroll()
}
}
store.Search(criteria, cb)
return nil
}