From: martin f. krafft Date: Sun, 26 Aug 2007 19:52:55 +0000 (+0200) Subject: checkin of tickler processor X-Git-Url: https://git.madduck.net/etc/mailfilter.git/commitdiff_plain/79aefc4e56fb0bc243999c4437dbbb4bd5afa27c checkin of tickler processor --- diff --git a/bin/process-tickler b/bin/process-tickler new file mode 100755 index 0000000..c853294 --- /dev/null +++ b/bin/process-tickler @@ -0,0 +1,60 @@ +#!/usr/bin/python2.5 +# -*- coding: utf-8 -*- +# +# process-tickler – process message in tickler maildir +# +# Copyright © martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# + +import mailbox +import os +import sys +import time + +HOME = os.getenv('HOME') +MAILDIR = os.path.join(HOME, '.maildir') +TICKLER_DIR = os.path.join(MAILDIR, '.tickler') +INBOX_DIR = MAILDIR + +tmd = mailbox.Maildir(TICKLER_DIR) +imd = mailbox.Maildir(INBOX_DIR) +msgids = dict() + +def move_to_inbox(key): + msg = tmd.get_message(key) + print >>sys.stdout, 'I: move message %s to inbox' % key + imd.add(msg) + tmd.discard(key) + +for key, msg in tmd.iteritems(): + msgid = msg.get('Message-Id') + if msgid is None: + print >>sys.stderr, 'W: message without ID: ' + key + move_to_inbox(key) + + tickle = msg.get('X-Tickle') + if tickle is None: + print >>sys.stderr, 'W: message without tickle information: ' + key + move_to_inbox(key) + + if msgids.get(msgid, None) is None: + msgids[msgid] = list() + msgids[msgid].append((int(tickle.split(' ', 1)[0]), key, msg)) + +for msgid, msgs in msgids.iteritems(): + msgs.sort() + prev_tickle = None + for tickle, key, msg in msgs: + if tickle == prev_tickle: + print >>sys.stderr, 'I: discarding duplicate %s of message %s' % (key, msgid) + tmd.discard(key) + continue + prev_tickle = tickle + + t = time.time() + if t >= tickle: + move_to_inbox(key) + else: + print >>sys.stdout, 'I: message %s still has %d seconds' % (key, + int(tickle - t))