From 90d26da58a4af2d34328f5916adf3781222966c6 Mon Sep 17 00:00:00 2001 From: Jeffas Date: Thu, 19 Sep 2019 23:37:44 +0100 Subject: 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. --- lib/sort/sort.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 lib/sort/sort.go (limited to 'lib/sort') diff --git a/lib/sort/sort.go b/lib/sort/sort.go new file mode 100644 index 0000000..89c36a9 --- /dev/null +++ b/lib/sort/sort.go @@ -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) + } +} -- cgit v1.2.3