From: Dan White Date: Fri, 22 Apr 2011 02:33:03 +0000 (-0500) Subject: Handle single and multi-day all-day events X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=d55fa179b2eb6474ded160c4ec47bb49c5da662a;p=pubbin.git Handle single and multi-day all-day events --- diff --git a/ical2rem.py b/ical2rem.py index 021c90f..06886b4 100755 --- a/ical2rem.py +++ b/ical2rem.py @@ -42,38 +42,47 @@ 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] + duration = str(dtend - dtstart)[:-3] - if event.rruleset: - for dtstart in event.rruleset.between(fromDate, untilDate, inc=True): + 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) - else: - print >>outfile, remfmt_datetime % ( - dtstart.strftime(datefmt), - dtstart.strftime(timefmt), - duration, text) + elif isinstance(event.dtstart.value, datetime.date): + dtstart = event.dtstart.value + dtend = event.dtend.value + + duration = dtend - dtstart + oneday = datetime.timedelta(days=1) + + # all-day events end at start of next day (exclusive). Remind is + # inclusive + dtend = dtend - oneday + if event.rruleset: + print >>sys.stderr, '*** WARNING, ignoring repeating day event:' + print >>sys.stderr, event + + print >>outfile, remfmt_date % ( + dtstart.strftime(datefmt), + dtend.strftime(datefmt), + text) + + else: + raise TypeError('unknown dtstart type: %s (%s)' % + (event.dtstart.value, type(event.dtstart.value)))