commit 5c27254aae62aba4d3d5638422213f9b6756510c
parent 63354d9e00dd8dfeffbc1c4735e3dd4e1845a7c8
Author: Jaromil <jaromil@dyne.org>
Date:   Sat,  2 Jun 2012 01:55:15 +0200
new maildir filter subcommand
Diffstat:
| M | src/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)  ;;