jaromail

a commandline tool to easily and privately handle your e-mail
git clone git://parazyd.org/jaromail.git
Log | Files | Refs | Submodules | README

commit 19de22114e68d351ae6e60d18a79eb71a53508d9
parent 6ff616c882c6762bb32b366495ed698406e0c3a3
Author: Jaromil <jaromil@dyne.org>
Date:   Sat, 31 Oct 2015 11:58:56 +0100

slight refactoring of search

fixes to multiple arguments and renaming of commands
now running 'alot' is made explicit by command
normal 'search' will print a list of full paths to emails found

Diffstat:
Msrc/jaro | 23++++++++++++++++++-----
Msrc/zlibs/addressbook | 9+++++++--
Msrc/zlibs/search | 101++++++++++++++++++++++++++++---------------------------------------------------
Msrc/zlibs/zuper | 1+
4 files changed, 62 insertions(+), 72 deletions(-)

diff --git a/src/jaro b/src/jaro @@ -150,6 +150,10 @@ vars+=(e_parsed) arrs+=(maildirs) vars+=(last_deliver) +# global arrays for search +arrs+=(search_results) +search_results=() + # global variable for mutt binary vars+=(mutt pgpewrap dotlock) @@ -473,9 +477,10 @@ main() { subcommands_opts[index]="" subcommands_opts[search]="" - subcommands_opts[nm_search]="" + subcommands_opts[alot]="" subcommands_opts[notmuch]="" + subcommands_opts[addr]="" subcommands_opts[learn]="" subcommands_opts[forget]="" @@ -675,9 +680,15 @@ main() { ;; # notmuch search with file output - nm_search) nm_search ${PARAM} ;; + search) search ${PARAM} + [[ $DRYRUN = 1 ]] || { + for i in ${search_results=}; do + print - "$i" + done + } + ;; - search) search ${PARAM} ;; + alot) alot_search ${PARAM} ;; notmuch) notice "Command: notmuch ${PARAM}" @@ -688,6 +699,8 @@ main() { # stat) stats ${PARAM} ;; + addr) search_addressbook ${PARAM} ;; + complete) complete ${PARAM} exitcode=$? ;; @@ -729,8 +742,8 @@ main() { preview) preview_file ${PARAM} ;; backup) backup ${PARAM} - exitcode=$? - ;; + exitcode=$? + ;; rmdupes) rmdupes ${PARAM} ;; merge) merge ${PARAM} ;; diff --git a/src/zlibs/addressbook b/src/zlibs/addressbook @@ -70,8 +70,13 @@ insert_address() { } search_addressbook() { - func "search \"$@\" in $list" - abook --datafile "$ADDRESSBOOK" --mutt-query "${@:l}" + fn search_addressbook $* + + abook --datafile "$ADDRESSBOOK" --mutt-query "${*:l}" | awk ' +/^$/ { next } +{ for(c=2;c<=NF;c++) printf "%s ", $c + print "<" $1 ">" }' + } diff --git a/src/zlibs/search b/src/zlibs/search @@ -27,10 +27,11 @@ # internal use nm() { - func "notmuch $@" + fn "notmuch $*" + [[ -r "$MAILDIRS"/cache/notmuch/rc ]] || nm_setup lock "$MAILDIRS"/cache/notmuch - notmuch --config="$MAILDIRS"/cache/notmuch/rc ${@} + notmuch --config="$MAILDIRS"/cache/notmuch/rc $* _res=$? unlock "$MAILDIRS"/cache/notmuch [[ $_res = 0 ]] || { @@ -100,18 +101,23 @@ nm_index() { } -nm_search() { - +search() { + fn search ${=PARAM} + func "searching for ${#PARAM} terms" # launch the search with notmuch - search_results=`nm search --output=files ${=PARAM}` + _results="" + + ztmp + # hard limit for list of file results is 100MB here + nm search --output=files ${=PARAM} >> $ztmpfile + search_results=(`cat $ztmpfile`) + [[ $? = 0 ]] || { error "notmuch search failed with an error" return 1 } - act "`print ${search_results} | wc -l` emails found" - for i in ${(f)search_results}; do - print - "$i" - done + + act "${#search_results} emails found" } @@ -120,7 +126,7 @@ alot_search() { read_account nm_setup - notice "Searching emails for: $=PARAM" + notice "Searching emails for: ${=PARAM}" # read if there are other email aliases configured [[ -r "$MAILDIRS"/Aliases.txt ]] && { @@ -201,75 +207,41 @@ EOF return $? } -search() { - - [[ "$PARAM" = "" ]] && { - error "No search terms specified." - return 1 +backup() { + fn backup $* + dst=${PARAM[1]} + shift 1 PARAM + expr=${=PARAM} + req=(dst expr) + ckreq + + maildircheck "$dst" + [[ $? = 0 ]] || { + error "First argument of backup must be a destination maildir" + return 1 } - typeset -al term - typeset -alU results - - for p in ${PARAM}; do - func "param ${p} is a search term" - term+=(${p}) - done - - [[ "$PARAM" =~ "addr" ]] && { - # if addr specified search into the addressbook - notice "Searching addressbook for: ${PARAM//addr/}" - res="" - for t in ${term}; do - [[ "$t" =~ "addr" ]] && continue - # res+=`search_addressbook ${t}` - search_addressbook ${t} | awk ' -/^$/ { next } -{ for(c=2;c<=NF;c++) printf "%s ", $c - print "<" $1 ">" }' - done - return 0 + [[ "$expr" = "" ]] && { + error "No expression set for backup, please indicate what you want to backup" + act "For example: date:10y..2y (all mails older than 1 year up to 10 years ago)" + act "Or a simple search string, all expressions can be verified using search." + return 1 } - # run search across emails - alot_search ${=PARAM} -} - -backup() { id=`datestamp`.$RANDOM c=0 - dst=${PARAM[1]} - shift 1 PARAM - expr=${PARAM} - notice "Backup of mails matched by search expression" act "expression: $expr" act "destination folder: $dst" - [[ $DRYRUN = 1 ]] && act "Dryrun mode enabled" - - [[ $DRYRUN = 0 ]] && { - maildircheck "$dst" - [[ $? = 0 ]] || { - error "First argument of backup command must be an existing maildir" - return 1 - } - } - - [[ "$expr" = "" ]] && { - error "No expression set for backup, please indicate what you want to backup" - act "For example: d:10y-2y (all mails older than 1 year up to 10 years ago)" - act "Or a simple search string, all expressions can be verified using search." - return 1 - } read_account nm_setup - _res=`nm_search ${=expr}` + search ${=expr} [[ $DRYRUN = 0 ]] && { - for i in ${(f)_res}; do + for i in ${search_results}; do refile $i $dst [[ $? = 0 ]] || { # bail out on every single error @@ -279,6 +251,5 @@ backup() { } done } - - + return 0 } diff --git a/src/zlibs/zuper b/src/zlibs/zuper @@ -254,6 +254,7 @@ _ztmp_destructor() { fn _ztmp_destructor for f in $tmpfiles; do + func "removed $f" rm -f "$f" done tmpfiles=()