From c2f4404fca15be37228545b1893f5fa335168337 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Tue, 5 Jul 2022 14:48:40 -0500 Subject: 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 Acked-by: Robin Jarry --- worker/imap/open.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'worker/imap/open.go') 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), -- cgit v1.2.3