From 79aefc4e56fb0bc243999c4437dbbb4bd5afa27c Mon Sep 17 00:00:00 2001 From: "martin f. krafft" Date: Sun, 26 Aug 2007 21:52:55 +0200 Subject: [PATCH] checkin of tickler processor --- bin/process-tickler | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 bin/process-tickler 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)) -- 2.39.2