From f3fe3c818cf277a547024492abd90c155dab1cd4 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 18 Aug 2014 12:16:42 +0200 Subject: Gracefully handle all day events in iCal imports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not create two events when importing an event that lasts an entire day. Reported-by: Jörn Tillmanns Reported-by: Håkan Jerning Signed-off-by: Lukas Fleischer --- src/ical.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/ical.c b/src/ical.c index 264348b..16281e6 100644 --- a/src/ical.c +++ b/src/ical.c @@ -302,19 +302,32 @@ ical_store_event(char *mesg, char *note, long day, long end, recur_event_new(mesg, note, day, EVENTID, rpt->type, rpt->freq, rpt->until, exc); mem_free(rpt); - } else if (end && end != day) { - /* Here we have an event that spans over several days. */ - rpt = mem_malloc(sizeof(ical_rpt_t)); - rpt->type = RECUR_DAILY; - rpt->freq = 1; - rpt->count = 0; - rpt->until = end; - recur_event_new(mesg, note, day, EVENTID, rpt->type, - rpt->freq, rpt->until, exc); - mem_free(rpt); - } else { + goto cleanup; + } + + if (end == 0 || end - day <= DAYINSEC) { event_new(mesg, note, day, EVENTID); + goto cleanup; } + + /* + * Here we have an event that spans over several days. + * + * In iCal, the end specifies when the event is supposed to end, in + * calcurse, the end specifies the time that the last occurrence of the + * event starts, so we need to do some conversion here. + */ + end = day + ((end - day - 1) / DAYINSEC) * DAYINSEC; + rpt = mem_malloc(sizeof(ical_rpt_t)); + rpt->type = RECUR_DAILY; + rpt->freq = 1; + rpt->count = 0; + rpt->until = end; + recur_event_new(mesg, note, day, EVENTID, rpt->type, + rpt->freq, rpt->until, exc); + mem_free(rpt); + +cleanup: mem_free(mesg); erase_note(¬e); } -- cgit v1.2.3-70-g09d2