commit 3eec02ee1af607631e0a49b8321f2c5283ad908f
parent 2708e255e2876536286b2b6e403de0bc0d8b6343
Author: Jaromil <jaromil@dyne.org>
Date:   Wed, 31 Dec 2014 20:23:28 +0100
more fixes and indenting of filter engine
Diffstat:
3 files changed, 137 insertions(+), 130 deletions(-)
diff --git a/src/jaro b/src/jaro
@@ -676,8 +676,11 @@ main()
     compose) compose ${PARAM} ;;
     queue)   queue ${PARAM} ;;
     fetch)
-        if [ "$account" = "" ]; then fetchall
-        else fetch; fi
+        if [[ "$account" = "" ]]; then
+            fetchall
+        else
+            fetch
+        fi
         filter_maildir incoming
         ;;
     send)    send ${PARAM} ;; # was checking is_online
@@ -694,7 +697,10 @@ main()
 
     help) CLEANEXIT=0; usage ;;
 
-    index) CLEANEXIT=0; nm_index ;;
+    index) CLEANEXIT=0;
+            nm_index
+            nm compact
+            ;;
     search)  CLEANEXIT=0; search ${PARAM} ;;
 
     notmuch) CLEANEXIT=0;
diff --git a/src/zlibs/email b/src/zlibs/email
@@ -169,6 +169,7 @@ fetch() {
     }
 
     # updates the notmuch configuration
+    # setup the unread default tag
     nm_setup unread
 
     notice "Fetching email for account ${account}"
@@ -243,8 +244,7 @@ fetch() {
 
     fmconf+=(" antispam 571 550 501 554 ")
 
-    print $accountopt | grep 'keep' > /dev/null
-    [[ $? = 0 ]] || {
+    [[ $accountopt =~ 'keep' ]] || {
         error "planning to delete mails from server, account option: $accountopt" }
 
     # try login without doing anything
diff --git a/src/zlibs/filters b/src/zlibs/filters
@@ -133,9 +133,10 @@ EOF
     done
 
     # create the notmuch database if not present
-    notice "Indexing emails in the search database"
-    nm_index
-    nm compact
+    [[ -r "$MAILDIRS"/cache/notmuch/rc ]] || {
+        notice "Indexing emails in the search database"
+        nm_index
+    }
 
     # compile the list of own addresses and aliases
     for i in `awk '
@@ -175,151 +176,151 @@ filter_maildir() {
     # be there.
     maildircheck "$MAILDIRS/unsorted"
     { test $? = 0 } || {
-    error "Invalid fallback maildir destination, operation aborted."
-    func "Returning error to caller."
-    return 1; }
+        error "Invalid fallback maildir destination, operation aborted."
+        func "Returning error to caller."
+        return 1; }
 
     # loads up the filter cache (zsh compiled arrays)
     { test -r "$MAILDIRS/cache/filters" } && {
-    source $MAILDIRS/cache/filters
-    ownfilters=1 }
+        source $MAILDIRS/cache/filters
+        ownfilters=1 }
 
     { test "$1" = "" } && { mdinput=incoming }
 
     maildircheck "$MAILDIRS/$mdinput"
     { test $? = 0 } || {
-    error "Invalid maildir to filter: $mdinput"
-    return 1; }
+        error "Invalid maildir to filter: $mdinput"
+        return 1; }
 
     numm=`${=find} "$MAILDIRS/$mdinput" -maxdepth 2 -type f|wc -l`
     mails=`${=find} "$MAILDIRS/$mdinput" -maxdepth 2 -type f`
 
     { test "$numm" = "0" } && {
-    error "Nothing to filter inside maildir $mdinput"
-    return 1 }
+        error "Nothing to filter inside maildir $mdinput"
+        return 1 }
 
     notice "Filtering maildir: $mdinput ($numm mails}"
     c=0
 
     for m in ${(f)mails}; do
-    match=0
-    c=$(($c + 1))
-
-    list="blacklist"
-    hdr "$m" | sender_isknown
-    { test $? = 0 } && {
-        cat "$m" | deliver zz.blacklist
-        { test $? = 0 } && { rm "$m" }
-        act "$c\t\t/ $numm\t\t->\tzz.blacklist"
-        continue }
-
-    hdr "$m" | awk '/Sender.*mailman-bounce/ { exit 1 }'
-    { test $? = 0 } || {
-        act "$c\t\t/ $numm\t\t->\tzz.bounces"
-        cat "$m" | deliver zz.bounces
-        { test $? = 0 } && { rm "$m" }
-        continue }
-
-    { test "$ownfilters" = "1" } && {
-
-        func "processing through own filters"
-        ffrom=`hdr "$m" | ${WORKDIR}/bin/fetchaddr -x From -a`
-
-        # run all filter regexps on the from: field
-        { test "$ffrom" = "" } || {
-            femail="${ffrom[(ws:,:)1]}"
-            for exp in ${(k)filter_from}; do
-                # special zsh parsing in PCRE (=~)
-                if [[ "$femail" =~ "$exp" ]]; then
-                    # if destination maildir is same as input, skip
-                    { test "${filter_from[$exp]}" = "$mdinput" } && {
-                        act "$c\t\t/ $numm"
-                        match=1; break }
-                    act "$c\t\t/ $numm\t\t-> ${filter_from[$exp]}"
-                    cat "$m" | deliver ${filter_from[$exp]}
-                    if [ $? = 0 ]; then
-                        func "from filter match: $exp"
-                        match=1; rm "$m"; break
-                    else
-                        error "Error filtering to maildir ${filter_from[$exp]}"
-                        error "File: $m"
-                        continue
+        match=0
+        c=$(($c + 1))
+
+        list="blacklist"
+        hdr "$m" | sender_isknown
+        { test $? = 0 } && {
+            cat "$m" | deliver zz.blacklist
+            { test $? = 0 } && { rm "$m" }
+            act "$c\t\t/ $numm\t\t->\tzz.blacklist"
+            continue }
+
+        hdr "$m" | awk '/Sender.*mailman-bounce/ { exit 1 }'
+        { test $? = 0 } || {
+            act "$c\t\t/ $numm\t\t->\tzz.bounces"
+            cat "$m" | deliver zz.bounces
+            { test $? = 0 } && { rm "$m" }
+            continue }
+
+        { test "$ownfilters" = "1" } && {
+
+            func "processing through own filters"
+            ffrom=`hdr "$m" | ${WORKDIR}/bin/fetchaddr -x From -a`
+
+            # run all filter regexps on the from: field
+            { test "$ffrom" = "" } || {
+                femail="${ffrom[(ws:,:)1]}"
+                for exp in ${(k)filter_from}; do
+
+                    if [[ "$femail" =~ "$exp" ]]; then
+                        # if destination maildir is same as input, skip
+                        { test "${filter_from[$exp]}" = "$mdinput" } && {
+                            act "$c\t\t/ $numm"
+                            match=1; break }
+                        act "$c\t\t/ $numm\t\t-> ${filter_from[$exp]}"
+                        cat "$m" | deliver ${filter_from[$exp]}
+                        if [ $? = 0 ]; then
+                            func "from filter match: $exp"
+                            match=1; rm "$m"; break
+                        else
+                            error "Error filtering to maildir ${filter_from[$exp]}"
+                            error "File: $m"
+                            continue
+                        fi
                     fi
-                fi
-            done
-        }
-        { test "$match" = "1" } && { continue }
-
-        typeset -alU ftos
-        # recompile the array of destination addresses
-        ftos=(`hdr "$m" | ${WORKDIR}/bin/fetchaddr -x cc -a | cut -d, -f1`)
-        ftos+=(`hdr "$m" | ${WORKDIR}/bin/fetchaddr -x to -a | cut -d, -f1`)
-
-        # run all filter regexps on the to: and cc: fields
-        { test "$ftos" = "" } || {
-        for ft in ${(f)ftos}; do
-            for exp in ${(k)filter_to}; do
-            # special zsh parsing in PCRE (=~)
-            if [[ "$ft" =~ "$exp" ]]; then
-                # if destination maildir is same as input, skip
-                { test "${filter_to[$exp]}" = "$mdinput" } && {
-                act "$c\t\t/ $numm"
-                match=1; break }
-                act "$c\t\t/ $numm\t\t-> ${filter_to[$exp]}"
-                cat "$m" | deliver ${filter_to[$exp]}
-                if [ $? = 0 ]; then
-                func "to filter match: $exp"
-                match=1; rm "$m"; break
-                else
-                error "Error filtering to maildir ${filter_to[$exp]}"
-                error "File: $m"
-                continue
-                fi
+                done
+            }
+            { test "$match" = "1" } && { continue }
+
+            typeset -alU ftos
+            # recompile the array of destination addresses
+            ftos=(`hdr "$m" | ${WORKDIR}/bin/fetchaddr -x cc -a | cut -d, -f1`)
+            ftos+=(`hdr "$m" | ${WORKDIR}/bin/fetchaddr -x to -a | cut -d, -f1`)
+
+            # run all filter regexps on the to: and cc: fields
+            { test "$ftos" = "" } || {
+                for ft in ${(f)ftos}; do
+                    for exp in ${(k)filter_to}; do
+                        # special zsh parsing in PCRE (=~)
+                        if [[ "$ft" =~ "$exp" ]]; then
+                            # if destination maildir is same as input, skip
+                            { test "${filter_to[$exp]}" = "$mdinput" } && {
+                                act "$c\t\t/ $numm"
+                                match=1; break }
+                            act "$c\t\t/ $numm\t\t-> ${filter_to[$exp]}"
+                            cat "$m" | deliver ${filter_to[$exp]}
+                            if [ $? = 0 ]; then
+                                func "to filter match: $exp"
+                                match=1; rm "$m"; break
+                            else
+                                error "Error filtering to maildir ${filter_to[$exp]}"
+                                error "File: $m"
+                                continue
+                            fi
+                        fi
+                    done
+                    { test "$match" = "1" } && { break }
+                done
+            }
+
+            { test "$match" = "1" } && { func "own filter match"; continue }
+
+        } # own filters
+
+        list="whitelist"
+        hdr "$m" | sender_isknown
+        { test $? = 0 } && {
+            act "$c\t\t/ $numm\t\t-> known"
+            cat "$m" | deliver known
+            { test $? = 0 } && { rm "$m" }
+            continue }
+
+        hdr "$m" | awk '/X-Spam-Flag.*YES/ { exit 1 }'
+        { test $? = 0 } || {
+            act "$c\t\t/ $numm\t\t-> zz.spam"
+            cat "$m" | deliver zz.spam
+            { test $? = 0 } && { rm "$m" }
+            continue }
+
+        # parse own email and aliases
+        match=0
+        for f in $ftos; do
+            # check if destination address is in filter_own array
+            if [[ ${filter_own[(r)$f]} == ${f} ]] ; then
+                act "$c\t\t/ $numm\t\t-> priv"
+                cat "$m" | deliver priv
+                { test $? = 0 } && { rm "$m"; match=1; break }
             fi
-            done
-            { test "$match" = "1" } && { break }
         done
-        }
-
-        { test "$match" = "1" } && { func "own filter match"; continue }
-
-    } # own filters
-
-    list="whitelist"
-    hdr "$m" | sender_isknown
-    { test $? = 0 } && {
-        act "$c\t\t/ $numm\t\t-> known"
-        cat "$m" | deliver known
-        { test $? = 0 } && { rm "$m" }
-        continue }
+        { test "$match" = "1" } && { continue }
 
-    hdr "$m" | awk '/X-Spam-Flag.*YES/ { exit 1 }'
-    { test $? = 0 } || {
-        act "$c\t\t/ $numm\t\t-> zz.spam"
-        cat "$m" | deliver zz.spam
-        { test $? = 0 } && { rm "$m" }
-        continue }
-
-    # parse own email and aliases
-    match=0
-    for f in $ftos; do
-        # check if destination address is in filter_own array
-        if [[ ${filter_own[(r)$f]} == ${f} ]] ; then
-        act "$c\t\t/ $numm\t\t-> priv"
-        cat "$m" | deliver priv
-        { test $? = 0 } && { rm "$m"; match=1; break }
+        # if here then file to unsorted
+        if [ "$mdinput" = "unsorted" ]; then
+            act "$c\t\t/ $numm"
+        else
+            act "$c\t\t/ $numm\t\t-> unsorted"
+            cat "$m" | deliver unsorted
+            { test $? = 0 } && { rm "$m" }
         fi
-    done
-    { test "$match" = "1" } && { continue }
-
-    # if here then file to unsorted
-    if [ "$mdinput" = "unsorted" ]; then
-        act "$c\t\t/ $numm"
-    else
-        act "$c\t\t/ $numm\t\t-> unsorted"
-        cat "$m" | deliver unsorted
-        { test $? = 0 } && { rm "$m" }
-    fi
 
     done