aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/base/imap.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/imap.go')
-rw-r--r--plugins/base/imap.go26
1 files changed, 21 insertions, 5 deletions
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index 8ea88e9..c71f0d3 100644
--- a/plugins/base/imap.go
+++ b/plugins/base/imap.go
@@ -471,12 +471,28 @@ func searchMessages(conn *imapclient.Client, mboxName, query string, page, messa
return nil, 0, err
}
- criteria := PrepareSearch(query)
- data, err := conn.Search(criteria, nil).Wait()
- if err != nil {
- return nil, 0, fmt.Errorf("UID SEARCH failed: %v", err)
+ searchCriteria := PrepareSearch(query)
+
+ var nums []uint32
+ if !conn.Caps().Has(imap.CapSort) {
+ data, err := conn.Search(searchCriteria, nil).Wait()
+ if err != nil {
+ return nil, 0, fmt.Errorf("SEARCH failed: %v", err)
+ }
+ nums = data.AllNums()
+ } else {
+ sortOptions := &imapclient.SortOptions{
+ SearchCriteria: searchCriteria,
+ SortCriteria: []imapclient.SortCriterion{
+ {Key: imapclient.SortKeyDate, Reverse: true},
+ },
+ }
+ nums, err = conn.Sort(sortOptions).Wait()
+ if err != nil {
+ return nil, 0, fmt.Errorf("SORT failed: %v", err)
+ }
}
- nums := data.AllNums()
+
total = len(nums)
from := page * messagesPerPage