+#!/usr/bin/python2.5
+# -*- coding: utf-8 -*-
+#
+# process-tickler – process message in tickler maildir
+#
+# Copyright © martin f. krafft <madduck@debian.org>
+# 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))