From: Dan White Date: Tue, 1 Mar 2011 16:36:58 +0000 (-0600) Subject: Add ical to remind converter X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=61ecab5c5606af0c8100038dae21cc337f98554c;p=pubbin.git Add ical to remind converter --- diff --git a/ical2rem.py b/ical2rem.py new file mode 100755 index 0000000..021c90f --- /dev/null +++ b/ical2rem.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +# Dan White + +# public domain + +import datetime +import sys +import time + +import pytz +import vobject + +#testing +#sys.argv[1] = 'basic.ics' +#sys.argv.append('-') + +centralTime = pytz.timezone('America/Chicago') + +datefmt = '%b %d %Y' +timefmt = '%H:%M' +remfmt_datetime = 'REM %s AT %s DURATION %s MSG %%"%s%%" [t()]%%' +remfmt_date = 'REM %s *1 UNTIL %s MSG %%"%s%%" [t()]%%' + +# one year out +fromDate = datetime.datetime(2010,1,1, tzinfo=centralTime) +untilDate = fromDate + datetime.timedelta(days=365.25*4) + +if sys.argv[1] == '-': + infile = sys.stdin +else: + infile = open(sys.argv[1]) + +if sys.argv[2] == '-': + outfile = sys.stdout +else: + outfile = open(sys.argv[2], 'wb') + +cal = vobject.readOne(infile) + + +for event in cal.vevent_list: + text = event.summary.value + + #print event + + # TODO: handle all-day events of +1 day duration + + #detect all-day events vs. times + if isinstance(event.dtstart.value, datetime.datetime): + dtstart = event.dtstart.value.astimezone(centralTime) + dtend = event.dtend.value.astimezone(centralTime) + elif isinstance(event.dtstart.value, datetime.date): + #cannot handle this yet + continue + #dtstart = event.dtstart.value + #dtend = event.dtend.value + else: + raise TypeError('unknown dtstart type: %s (%s)' % + (event.dtstart.value, type(event.dtstart.value))) + + duration = str(dtend - dtstart)[:-3] + + + if event.rruleset: + for dtstart in event.rruleset.between(fromDate, untilDate, inc=True): + print >>outfile, remfmt_datetime % ( + dtstart.strftime(datefmt), + dtstart.strftime(timefmt), + duration, text) + else: + print >>outfile, remfmt_datetime % ( + dtstart.strftime(datefmt), + dtstart.strftime(timefmt), + duration, text) + + + +