X-Git-Url: https://git.madduck.net/etc/mailfilter.git/blobdiff_plain/7047e6e0505152b6aa2242e1975340a99f5e57e3..e11fbc3da82836b4edb0d8350075c2461ebc2f00:/procmail/tickle

diff --git a/procmail/tickle b/procmail/tickle
index 71edef6..672358d 100644
--- a/procmail/tickle
+++ b/procmail/tickle
@@ -1,21 +1,66 @@
 :0
-* ORIGINAL_TO ?? ^[0-9]+@tickle\.madduck\.net$
-* ORIGINAL_TO ?? ^\/[0-9]+
+* ORIGINAL_TO ?? ^.+@tickle\.madduck\.net$
+* ORIGINAL_TO ?? ^\/[^@]+
 {
-  TICKLEDIR=$BASE/.tickle.$MATCH
+  BIN_DATE=/bin/date
+  DELIVERY_TIME=04:20
+  STAMP
 
   :0
-  * ? test ! -d $TICKLEDIR/cur
+  * 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`)" }
+
+  :0 E
+  * MATCH ?? ^[0-9]+h$
+  * MATCH ?? ^\/[^h]+
+  { DATESTR="$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" }
+
+  :0 E
+  * MATCH ?? ^[0-9]+w$
+  * MATCH ?? ^\/[^w]+
+  { DATESTR="$JUST_DATE + $MATCH weeks $DELIVERY_TIME" }
+
+  :0 E
+  * MATCH ?? ^[0-9]+d?$
+  * MATCH ?? ^\/[^d]+
+  { DATESTR="$JUST_DATE + $MATCH days $DELIVERY_TIME" }
+
+  JUST_DATE
+  DELIVERY_TIME
+
+  :0 E
   {
-    LOG="tickle:      received message outside tickle range: $MATCH$NL"
+    LOG="tickle:      invalid date string: $MATCH$NL"
+    EXITCODE=69
+    HOST
+  }
+
+  :0
+  * ! STAMP ?? .
+  { STAMP=`$BIN_DATE +'%s (%c)' -d "$DATESTR"` }
 
-    :0
-    $DISCARD
+  :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)"
   }
 
-  LOG="tickle:      file message and tickle in $MATCH day(s)$NL"
+  :0 E
+  { LOG="tickle:      stamping message $MSGID with $STAMP$NL" }
+
+  :0 fw
+  |$FORMAIL -i "X-Tickle: $STAMP"
 
   :0
-  $TICKLEDIR/
-  TICKLEDIR
+  $BASE/.tickler/
+
+  BIN_DATE
 }