From: martin f. krafft Date: Sun, 23 Sep 2007 23:50:14 +0000 (+0200) Subject: process tickle submissions with delayed queue X-Git-Url: https://git.madduck.net/etc/mailfilter.git/commitdiff_plain/3045078502871a4f349f35a338f5ae0a568a12d7?ds=inline process tickle submissions with delayed queue --- diff --git a/bin/process-delayed-queue b/bin/process-delayed-queue index e5bb5f1..fd84840 100755 --- a/bin/process-delayed-queue +++ b/bin/process-delayed-queue @@ -10,13 +10,39 @@ DELAYED_QUEUE_DB=$HOME/.var/procmail/delayed-queue.sqlite QUERY='select * from messages where release_ts < strftime("%s", "now")' -$SQLITE -column $DELAYED_QUEUE_DB "$QUERY" | while read msgid file ts; do - file="$MAILDIR/$file" - if [ ! -f "$file" ]; then - echo "E: message $msgid not found in $file" >&2 - else - $RESUBMIT "$file" - echo "I: resubmitted $msgid" - fi +$SQLITE -column $DELAYED_QUEUE_DB "$QUERY" | while read msgid basefile ts; do + + file="$MAILDIR/$basefile" + files="$file ${file}:2," + + basename="${file##*/}" + dirname="${file%/*}" + case "${dirname##*/}" in + cur) + files="$files ${file}:2,S" + file="${dirname%/cur}/new/$basename" + files="$files $file ${file}:2," + ;; + new) + file="${dirname%/new}/cur/$basename" + files="$files ${file}:2, ${file}:2,S" + ;; + esac + + found=0 + for file in $files; do + if [ -f "$file" ]; then + $RESUBMIT "$file" + echo "I: resubmitted $msgid" + found=1 + break + fi + done + $SQLITE $DELAYED_QUEUE_DB "delete from messages where msgid = '$msgid'" + + if [ $found -eq 0 ]; then + echo "E: message $msgid not found in $basefile" >&2 + fi + done diff --git a/procmail/tickle b/procmail/tickle index 7aa4db8..f03d1ab 100644 --- a/procmail/tickle +++ b/procmail/tickle @@ -9,29 +9,29 @@ :0 * MATCH ?? ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$ - { STAMP="$MATCH (`$BIN_DATE -d @$MATCH +%c`)" } + { DELAY="@$MATCH" } :0 E * MATCH ?? ^[0-9]+h$ * MATCH ?? ^\/[^h]+ - { DATESTR="$DATE + $MATCH hours" } + { DELAY="$DATE + $MATCH hours" } JUST_DATE="`$BIN_DATE -d \"$DATE\" +%x`" :0 E * MATCH ?? ^[0-9]+m$ * MATCH ?? ^\/[^m]+ - { DATESTR="$JUST_DATE + $MATCH months $DELIVERY_TIME" } + { DELAY="$JUST_DATE + $MATCH months $DELIVERY_TIME" } :0 E * MATCH ?? ^[0-9]+w$ * MATCH ?? ^\/[^w]+ - { DATESTR="$JUST_DATE + $MATCH weeks $DELIVERY_TIME" } + { DELAY="$JUST_DATE + $MATCH weeks $DELIVERY_TIME" } :0 E * MATCH ?? ^[0-9]+d?$ * MATCH ?? ^\/[^d]+ - { DATESTR="$JUST_DATE + $MATCH days $DELIVERY_TIME" } + { DELAY="$JUST_DATE + $MATCH days $DELIVERY_TIME" } JUST_DATE DELIVERY_TIME @@ -43,25 +43,30 @@ HOST } - :0 - * ! STAMP ?? . - { STAMP=`$BIN_DATE +'%s (%c)' -d "$DATESTR"` } - - :0 - * ! STAMP ?? ^[0-9]+ \([A-Za-z ]+ [0-9 :]+\)$ - { - LOG="tickle: error creating timestamp ($STAMP), using \$now$NL" - STAMP="`$BIN_DATE +%s` (ERROR: original stamp '$STAMP' invalid)" - } - - :0 E - { LOG="tickle: stamping message $MSGID with $STAMP$NL" } + DELAYED_QUEUE=$BASE/.store/ :0 fw - |$FORMAIL -i "X-Tickle: $STAMP" + |$FORMAIL -i 'X-Tickle: yes' - :0 - { DEST=$TICKLER_QUEUE } +# :0 +# * ! STAMP ?? . +# { STAMP=`$BIN_DATE +'%s (%c)' -d "$DELAY"` } +# +# :0 +# * ! STAMP ?? ^[0-9]+ \([A-Za-z ]+ [0-9 :]+\)$ +# { +# LOG="tickle: error creating timestamp ($STAMP), using \$now$NL" +# STAMP="`$BIN_DATE +%s` (ERROR: original stamp '$STAMP' invalid)" +# } +# +# :0 E +# { LOG="tickle: stamping message $MSGID with $STAMP$NL" } +# +# :0 fw +# |$FORMAIL -i "X-Tickle: $STAMP" +# +# :0 +# { DEST=$TICKLER_QUEUE } } # vim:ft=procmail