diff options
Diffstat (limited to 'plugins/base/imap.go')
-rw-r--r-- | plugins/base/imap.go | 26 |
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 |