Add sorting functionality
There is a command and config option. The criteria are a list of the sort criterion and each can be individually reversed. This only includes support for sorting in the maildir backend currently. The other backends are not supported in this patch.
This commit is contained in:
parent
43435ba06c
commit
90d26da58a
9 changed files with 491 additions and 8 deletions
lib/sort
56
lib/sort/sort.go
Normal file
56
lib/sort/sort.go
Normal file
|
@ -0,0 +1,56 @@
|
|||
package sort
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc/worker/types"
|
||||
)
|
||||
|
||||
func GetSortCriteria(args []string) ([]*types.SortCriterion, error) {
|
||||
var sortCriteria []*types.SortCriterion
|
||||
reverse := false
|
||||
for _, arg := range args {
|
||||
if arg == "-r" {
|
||||
reverse = true
|
||||
continue
|
||||
}
|
||||
field, err := parseSortField(arg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sortCriteria = append(sortCriteria, &types.SortCriterion{
|
||||
Field: field,
|
||||
Reverse: reverse,
|
||||
})
|
||||
reverse = false
|
||||
}
|
||||
if reverse {
|
||||
return nil, errors.New("Expected argument to reverse")
|
||||
}
|
||||
return sortCriteria, nil
|
||||
}
|
||||
|
||||
func parseSortField(arg string) (types.SortField, error) {
|
||||
switch strings.ToLower(arg) {
|
||||
case "arrival":
|
||||
return types.SortArrival, nil
|
||||
case "cc":
|
||||
return types.SortCc, nil
|
||||
case "date":
|
||||
return types.SortDate, nil
|
||||
case "from":
|
||||
return types.SortFrom, nil
|
||||
case "read":
|
||||
return types.SortRead, nil
|
||||
case "size":
|
||||
return types.SortSize, nil
|
||||
case "subject":
|
||||
return types.SortSubject, nil
|
||||
case "to":
|
||||
return types.SortTo, nil
|
||||
default:
|
||||
return types.SortArrival, fmt.Errorf("%v is not a valid sort criterion", arg)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue