summaryrefslogtreecommitdiff
path: root/worker/imap/open.go
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-07-05 14:48:40 -0500
committerRobin Jarry <robin@jarry.cc>2022-07-10 21:15:12 +0200
commitc2f4404fca15be37228545b1893f5fa335168337 (patch)
tree2bfc788a7e38510f1d5057c4b47d2460a548cb44 /worker/imap/open.go
parentccd042889f6d8aa78b70c01395ef69aec48ac48c (diff)
downloadaerc-c2f4404fca15be37228545b1893f5fa335168337.zip
threading: enable filtering of server-side threads
This patch enables the filtering of a threaded view which uses server-built threads. Filtering is done server-side, in order to preserve the use of server-built threads. In adding this feature, the filtering of notmuch folders was brought up to feature parity with the other workers. The filters function the same (ie: they can be stacked). The notmuch filters, however, still use notmuch syntax for the filtering. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'worker/imap/open.go')
-rw-r--r--worker/imap/open.go25
1 files changed, 16 insertions, 9 deletions
diff --git a/worker/imap/open.go b/worker/imap/open.go
index a0607d0..b52a3c6 100644
--- a/worker/imap/open.go
+++ b/worker/imap/open.go
@@ -3,7 +3,6 @@ package imap
import (
"sort"
- "github.com/emersion/go-imap"
sortthread "github.com/emersion/go-imap-sortthread"
"git.sr.ht/~rjarry/aerc/worker/types"
@@ -29,11 +28,13 @@ func (imapw *IMAPWorker) handleFetchDirectoryContents(
imapw.worker.Logger.Printf("Fetching UID list")
- seqSet := &imap.SeqSet{}
- seqSet.AddRange(1, imapw.selected.Messages)
-
- searchCriteria := &imap.SearchCriteria{
- SeqNum: seqSet,
+ searchCriteria, err := parseSearch(msg.FilterCriteria)
+ if err != nil {
+ imapw.worker.PostMessage(&types.Error{
+ Message: types.RespondTo(msg),
+ Error: err,
+ }, nil)
+ return
}
sortCriteria := translateSortCriterions(msg.SortCriteria)
@@ -98,10 +99,16 @@ func (imapw *IMAPWorker) handleDirectoryThreaded(
msg *types.FetchDirectoryThreaded) {
imapw.worker.Logger.Printf("Fetching threaded UID list")
- seqSet := &imap.SeqSet{}
- seqSet.AddRange(1, imapw.selected.Messages)
+ searchCriteria, err := parseSearch(msg.FilterCriteria)
+ if err != nil {
+ imapw.worker.PostMessage(&types.Error{
+ Message: types.RespondTo(msg),
+ Error: err,
+ }, nil)
+ return
+ }
threads, err := imapw.client.thread.UidThread(sortthread.References,
- &imap.SearchCriteria{SeqNum: seqSet})
+ searchCriteria)
if err != nil {
imapw.worker.PostMessage(&types.Error{
Message: types.RespondTo(msg),