90d26da58a
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.
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|