commit f730d9a11e98ec8415e25468507ca27e04dc0045
parent 9a2e9ae99cd854e113fce1edfa1b9ba85f161a93
Author: Jaromil <jaromil@dyne.org>
Date: Fri, 17 Oct 2014 11:48:12 +0200
render sieve complex filters out of custom filters
Diffstat:
1 file changed, 25 insertions(+), 18 deletions(-)
diff --git a/src/zlibs/filters b/src/zlibs/filters
@@ -440,6 +440,8 @@ EOF
}
+# sieve_filter() gets an array of patterns to match and builds a long rule
+# for which if they match the conditional directive they all go in one folder
# $1 = conditional directive
# $2 = folder to fileinto
# sieve_filter_array: array of entries
@@ -468,6 +470,25 @@ EOF
return 0
}
+typeset -AlU sieve_filter_map
+# sieve_complex_filter gets a map of patterns as an argument and builds a
+# long rule for which any key matching it gets delivered to its value folder
+# $1 = conditional directive
+# sieve_filter_map = map of patterns, key is match and value is destination
+# assign with set -A sieve_filter_map yourmap
+sieve_complex_filter() {
+ [[ ${#sieve_filter_map} == 0 ]] && { return 1 }
+ condition="$1"
+ func "Sieve complex filter entries: ${#sieve_filter_map}"
+
+ for fil in ${(k)sieve_filter_map}; do
+ print "$condition \"${fil}\" { fileinto :create \"${sieve_filter_map[$fil]}\"; stop; }" \
+ >> "$MAILDIRS/Filters.sieve"
+ done
+
+ return 0
+}
+
update_sieve() {
#######
@@ -514,28 +535,14 @@ if header :contains "Sender" "mailman-bounce" {
EOF
- # now do our own filters
- sieve_filter_array=()
- { test ${#filter_to} -gt 0 } && {
-
- for f in ${(k)filter_to}; do
- sieve_filter_array+=($f); done
+ set -A sieve_filter_map ${(kv)filter_to}
+ sieve_complex_filter 'if header :contains [ "To","Cc" ] '
- sieve_filter \
- 'if header :contains [ "To","Cc" ] ' \
- filters
- }
+ set -A sieve_filter_map ${(kv)filter_from}
+ sieve_complex_filter 'if header :contains "From"'
- sieve_filter_array=()
- { test ${#filter_from} -gt 0 } && {
- for f in ${(k)filter_from}; do
- sieve_filter_array+=($f); done
- sieve_filter \
- 'if header :contains "From"' \
- filters
- }
##############################################################
# if the sender is known (whitelist) then put mail in