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 5c27254aae62aba4d3d5638422213f9b6756510c
parent 63354d9e00dd8dfeffbc1c4735e3dd4e1845a7c8
Author: Jaromil <jaromil@dyne.org>
Date:   Sat,  2 Jun 2012 01:55:15 +0200

new maildir filter subcommand

Diffstat:
Msrc/jaro | 59++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 48 insertions(+), 11 deletions(-)

diff --git a/src/jaro b/src/jaro @@ -956,18 +956,19 @@ backup() { } rmdupes() { - dir=$1 - if ! [ -r $dir ]; then - error "No maildir found in $dir" - return 1 - fi - notice "Removing duplicates in $dir" - c=0 - for i in `find ${dir}`; do - formail -D 100000 $WORKDIR/tmp/$dir.rmdupes <$i \ - && rm $i && c=`expr $c + 1` + newlock $WORKDIR/tmp/$datestamp.rmdupes + for folder in ${=PARAM}; do + { test ! -r $folder } && { folder=$MAILDIRS/$folder } + { test ! -r $folder } && { error "Maildir not found: $folder"; continue } + notice "Removing duplicates in $folder" + c=0 + for i in `find ${folder} -type f`; do + formail -D 100000 $WORKDIR/tmp/$datestamp.rmdupes <$i \ + && rm $i && c=`expr $c + 1` + done done - act "$c duplicates found and deleted" + unlock $WORKDIR/tmp/$datestamp.rmdupes + notice "$c duplicates found and deleted" } merge() { @@ -991,6 +992,40 @@ merge() { notice "Operation completed, you can now safely remove ${src}" } +# re-sort all maildir through the procmail filters +# it can create duplicates, up to the user to rmdupes +filter() { + + update # update all filters + + # archive old procmail log + if [ -r $WORKDIR/log/procmail.log ]; then + newlock $WORKDIR/log/procmail-${datestamp}.log + cat $WORKDIR/log/procmail.log \ + >> $WORKDIR/log/procmail-${datestamp}.log + rm -f $WORKDIR/log/procmail.log + unlock $WORKDIR/log/procmail-${datestamp}.log + fi + + for folder in ${=PARAM}; do + typeset -al fall + { test ! -r $folder } && { folder=$MAILDIRS/$folder } + { test ! -r $folder } && { error "Maildir not found: $folder"; return 1 } + notice "Filtering folder $folder" + # first index current state + for m in `find $folder -type f`; do fall+=($m); done + # then process it, this way ignoring new mails send to same folder + for n in ${=fall}; do + cat $n | procmail -m $PROCMAILDIR/rc + done + unset fall + done + + total=`mailstat -k $WORKDIR/log/procmail.log | tail -n1 | awk '{print $2}'` + briefing=`mailstat -kt $WORKDIR/log/procmail.log |awk '!/procmail/ { print " " $2 "\t" $3 }'|sort -nr` + echo "${briefing}" +} + ###################### usage() { @@ -1067,6 +1102,7 @@ main() subcommands_opts[backup]="" subcommands_opts[rmdupes]="" subcommands_opts[merge]="" + subcommands_opts[filter]="" # subcommands_opts[mount]=${subcommands_opts[open]} # subcommands_opts[create]="s: -size=s -ignore-swap k: -key=k" @@ -1153,6 +1189,7 @@ main() backup) backup ${PARAM} ;; rmdupes) rmdupes ${PARAM} ;; merge) merge ${PARAM} ;; + filter) filter ${PARAM} ;; 'source') return 0 ;; __default) ;;