[PATCH alps] plugins/base: sort search results by date
Export this patch
From: Konstantinos Koukas <contact@koukas.org>
Implement server-side sorting of search results using the SORT
extension to IMAP, if the server supports it. Otherwise, fall back to
the unordered SEARCH command.
Sort messages by sent date, in descending order.
---
plugins/base/imap.go | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index 8ea88e9..efa1de3 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("UID 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
--
2.38.5
Shouldn't we use UIDSort instead of Sort?
Apart from this, sounds good.
alps/patches/.build.yml: SUCCESS in 1m17s
[plugins/base: sort search results by date][0] from [~koukas][1]
[0]: https://lists.sr.ht/~migadu/alps-devel/patches/43402
[1]: mailto:contact@koukas.org
✓ #1036875 SUCCESS alps/patches/.build.yml https://builds.sr.ht/~migadu/job/1036875