Update import of basic recurrence rules

Conversion of COUNT to UNTIL was a simple calculation which assumed one
repetiton per period (day, week, month or year); it does not take exception
days and invalid dates into account. Solved by a new function which returns the
n'th occurrence of a recurrence rule.

In calcurse UNTIL is interpreted as a day (DATE), in RFC 5545 as a time of day
(DATE-TIME). This has implications when a recurrence rule has an occurrence on
the UNTIL day, see comment in ical.c

An "Import:" note is added when a multi-day event is imported and turned into a
calcurse all-day event.

Icalendar quotes in comments have been updated to RFC 5545.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen
2020-05-27 21:49:36 +02:00
committed by Lukas Fleischer
parent d8c1c48e78
commit d2791b046a
8 changed files with 336 additions and 135 deletions

View File

@@ -22,4 +22,31 @@ EXDATE:20000215T000000
EXDATE:20000223T000000
SUMMARY:Recurring appointment
END:VEVENT
BEGIN:VEVENT
DTSTART:20200526T120000
DURATION:PT1H17M0S
RRULE:FREQ=DAILY;UNTIL=20200529T130000
SUMMARY: until May 29 2020\, 13:00
END:VEVENT
BEGIN:VEVENT
DTSTART:20200526T120000
DURATION:PT1H17M0S
RRULE:FREQ=DAILY;UNTIL=20200529T110000
SUMMARY: until May 29 2020\, 11:00
END:VEVENT
BEGIN:VEVENT
DTSTART:20200531T214500
DURATION:PT15M0S
RRULE:FREQ=MONTHLY;COUNT=10
EXDATE:20200731T214500,20210131T214500
SUMMARY:monthly on 31th\, count 10\, exceptions 31/7/2020 and 31/1/2021
END:VEVENT
BEGIN:VEVENT
DTSTAMP:
UID:
DTSTART;VALUE=DATE:20200502
DTEND;VALUE=DATE:20200504
DESCRIPTION:The first weekend in May is a two-day event.
SUMMARY:First weekend in May
END:VEVENT
END:VCALENDAR

View File

@@ -111,6 +111,17 @@ RRULE:FREQ=MONTHLY;UNTIL=20201030
EXDATE;VALUE=DATE:20200606T120000Z
SUMMARY:Invalid EXDATE value
END:VEVENT
BEGIN:VEVENT
DTSTART:20200527T163000
DTEND:20200528T163000
DURATION:P1D
SUMMARY:Both end time and duration
END:VEVENT
BEGIN:VEVENT
DTSTART:20200527T163000
DTEND:20200526T163000
SUMMARY:End time before start
END:VEVENT
BEGIN:VTODO
SUMMARY:finally\, missing end of item
END:VCALENDAR