X-Git-Url: https://git.madduck.net/etc/mailfilter.git/blobdiff_plain/3d7d576505af2759a6227cec6bef322c688ec3f9..8549fbde661af16e69b421c2ba3f5bab7f5d9a22:/bin/resubmit

diff --git a/bin/resubmit b/bin/resubmit
index 5ef8237..62d9720 100755
--- a/bin/resubmit
+++ b/bin/resubmit
@@ -1,13 +1,69 @@
 #!/bin/sh
 set -eu
 
+ME="${0##*/}"
+
+about()
+{
+  echo "$ME -- resubmit messages to the mail filter"
+  echo "Copyright © martin f. krafft <madduck@madduck.net>"
+  echo "Released under the terms of the Artistic Licence 2.0"
+}
+
+usage()
+{
+  echo "Usage: $ME [options] <Maildir> [<Maildir> ...]"
+  echo
+  echo "Valid options are:"
+  cat <<-_eof | column -s\& -t
+	-V|--version & show version information.
+	-h|--help & show this output.
+	-l|--list & process the argument list (even if empty), never stdin
+	-r|--deliver-read & mark messages read on delivery
+	_eof
+}
+
+SHORTOPTS=Vhlr
+LONGOPTS=version,help,list,deliver-read
+
+list=0
+mark_read=0
+files=
+
+for opt in $(getopt -n $ME -o $SHORTOPTS -l $LONGOPTS -u -- "$@"); do
+  case "$opt" in
+    -V|--version) about; exit 0;;
+    -h|--help) about; echo; usage; exit 0;;
+    -l|--list) list=1;;
+    -r|--deliver-read) mark_read=1;;
+    --) :;;
+    *)
+      if [ -f "$opt" ] && [ -r "$opt" ]; then
+        files="$files $opt"
+      else
+        echo "E: unknown argument: $opt" >&2
+        exit 1
+      fi
+      ;;
+  esac
+done
+
 PROCMAIL=$HOME/.etc/mailfilter/procmail/procmailrc
-FORMAIL="formail -I 'X-Resubmitted: $(date -R)'"
 
-if [ -z "${1:-}" ]; then
-  $FORMAIL | exec $PROCMAIL
+if [ "$mark_read" -eq 1 ]; then
+  PROCMAIL="$PROCMAIL DELIVER_READ=1"
+fi
+
+# execute the date -R only during the eval, not immediately
+FILTER="sed -rne ':b;s/^Received:/&/;tf;p;n;bb' -e ':f;iReceived: by resubmission script; $(date -R)' -e ':e;p;n;be'"
+FILTER="$FILTER | /usr/bin/formail -I'X-Resubmitted: $(date -R)'"
+
+if [ -z "${files:-}" ] && [ $list -eq 0 ]; then
+  eval $FILTER | exec $PROCMAIL
 else
-  $FORMAIL "$1" | $PROCMAIL && rm -f "$1"
+  for f in $files; do
+    eval $FILTER < "$f" | $PROCMAIL && rm -f "$f"
+  done
 fi
 
 exit 0