-# create table messages (msgid text unique not null, filename text
-# primary key not null unique, release_ts integer not null);
+#TODO: create config/delay-(disabled|tonight|weekend)
:0
-* DELAY ?? .
-* ! DELAYED ?? .
+* POSTPONED ?? .
+{
+ LOG="delay: not delaying already-postponed message$NL"
+ :0 fw
+ |$FORMAIL -R X-Postponed X-Was-Postponed
+}
+
+:0 E
+* DISABLE_DELAYS ?? .
+{
+ LOG="delay: delays disabled, thus not delaying$NL"
+}
+
+:0 E
+* ? echo "$FROM" | $EGREP -qif $CONF/undelayed-senders
+{
+ LOG="delay: do not delay mail from $FROM$NL"
+}
+
+:0 E
+* 1^0 DELAY ?? .
+* 1^0 RELEASE ?? .
{
:0
- * DELAY ?? ^[0-9]
- { DELAY="now + $DELAY" }
+ * ! RELEASE ?? .
+ { RELEASE="`$BIN_DATE -d \"$DELAY\" +'%s (%c)'`" }
+ DELAY
- #TODO: for tickling, use header date
- RELEASE="`date -d \"$DELAY\" +'%s %c'`"
:0
*$ RELEASE ?? ^\/${RE_NOT_SPACE}+
{ RELEASE_TS=$MATCH }
:0
- *$ $RELEASE_TS^0
- *$ -$OURDATE_TS^0
+ *$ $RELEASE_TS ^0
+ *$ -$OURDATE_TS ^0
{
:0
- *$ RELEASE ?? ^[0-9]+${RE_SPACE}+\/.+
+ *$ RELEASE ?? ^[0-9]+${RE_SPACE}+\(\/[^)]+
{ RELEASE_TIME="$MATCH" }
LOG="delay: delay delivery of $MSGID until $RELEASE_TIME$NL"
- DELAYED_QUEUE_DB=$PMVAR/delayed-queue.sqlite
- DO_QUERY="$SQLITE $DELAYED_QUEUE_DB"
-
- DATA="$MSGID"
- INCLUDERC=$PMDIR/sql-escape
-
- Q="insert into messages values
- ($DATA, '\\'\$DESTFILE\\'', $RELEASE_TS)"
- TRAP="$TRAP; $DO_QUERY '$Q'"
+ RELEASE_TIME
:0 fw
- |$FORMAIL -I "X-Delayed: $RELEASE_TS ($RELEASE_TIME)"
+ |$FORMAIL -I"X-Postponed: $RELEASE"
:0
$DELAYED_QUEUE
}
+ RELEASE_TS
}