aboutsummaryrefslogtreecommitdiffstats
path: root/worker/notmuch
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2024-02-01 23:52:55 +0100
committerRobin Jarry <robin@jarry.cc>2024-02-11 22:03:56 +0100
commite7c26e02bb326f08c071e9f37ebf80952a0cca97 (patch)
treeb20503b2df2b1fafd751aa7abc998fca24fa66a4 /worker/notmuch
parent05874f867c76c8e9b8c1e67a57dc702e63d6d54b (diff)
downloadaerc-e7c26e02bb326f08c071e9f37ebf80952a0cca97.tar.gz
filter: allow workers to combine filter terms
Allow the backend workers to combine the filter terms. Currently, the consecutive filters are joined in the message store with a space (" "). This works well for most backends, but makes the filter combination for notmuch confusing. Example: Issuing two consecutive filter commands in notmuch :filter not tag:list :filter tag:list would create the following filter query 'not tag:list tag:list' This is not what users would expect; they expect: '(not tag:list) and (tag:list)' Note that the notmuch backend works correctly for the given query, but produced a query that does not match the user's expectation. This patch fixes this. The combination of filter terms in other backends remains the same. Reported-by: Ángel Castañeda <angel@acsq.me> Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Inwit <inwit@sindominio.net> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'worker/notmuch')
-rw-r--r--worker/notmuch/search.go9
1 files changed, 6 insertions, 3 deletions
diff --git a/worker/notmuch/search.go b/worker/notmuch/search.go
index 36d4c2df..a84711eb 100644
--- a/worker/notmuch/search.go
+++ b/worker/notmuch/search.go
@@ -5,6 +5,7 @@ package notmuch
import (
"fmt"
+ "strings"
"git.sr.ht/~rjarry/aerc/models"
"git.sr.ht/~rjarry/aerc/worker/types"
@@ -88,11 +89,13 @@ func translate(crit *types.SearchCriteria) string {
}
// other terms
- if crit.Terms != "" {
+ if len(crit.Terms) > 0 {
if crit.SearchBody {
- base.and("body:" + opt.QuoteArg(crit.Terms))
+ base.and("body:" + opt.QuoteArg(strings.Join(crit.Terms, " ")))
} else {
- base.and(crit.Terms)
+ for _, term := range crit.Terms {
+ base.and(term)
+ }
}
}