calcurse-edge/test/data/ical-009.ical
Lars Henriksen fabacecd16 Take value data type of event start into account in iCal import/export
The patch derives the item type (appointment or event) from the DTSTART
value type. It is then used to perform an extended check of date/time
values and reject non-conformant import files (like those reported in
Github issues #81, (calcurse) events.

The patch includes parsing and code corrections and minor refactoring.

Background:

Ical events are of two types, in calcurse called appointments and
events. RFC 5545 has no distinguishing names for them, but describes
them in section 3.6.1. The event type is derived from the value type of
the DTSTART property. The value type may be either DATE-TIME
(appointment) or DATE (event). If not specified by a VALUE property
parameter in DTSTART, the default value type is DATE-TIME. The value
type must be set explicitly to DATE to get an event. Other properties
and rrule parts must agree with the DTSTART value type (DTEND, DURATION,
EXDATE and UNTIL).

Previously the type of an imported event was derived from the format of
the DTSTART value. The DTSTART value type was not taken into account
when importing, and not specified for recurring events when exporting
(commit 0114289 solved it for events, see GitHub PR #97).

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-05-03 08:59:01 -04:00

117 lines
2.3 KiB
Plaintext

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
SUMMARY:A simple appointment
END:VEVENT
BEGIN:VTODO
PRIORITY:1
SUMMARY:A simple todo
END:VTODO
BEGIN:VEVENT
DTSTART:
DURATION:PT1H30M0S
SUMMARY:missing start time
END:VEVENT
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
RRULE:FREQ=HOURLY;INTERVAL=2;UNTIL=20200401T000000
SUMMARY:unsupported frequency
END:VEVENT
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
SUMMARY malformed summary line
END:VEVENT
BEGIN:VTODO
PRIORITY:10
SUMMARY:invalid priority
END:VTODO
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
RRULE:FREQ=DAILY;INTERVAL=2;UNTIL=20200401T000000
EXDATE 20200324T084100
SUMMARY:malformed exceptions line
END:VEVENT
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
SUMMARY:Summary with more than\none line
END:VEVENT
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
SUMMARY:malformed description line
DESCRIPTION something is missing
END:VEVENT
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
SUMMARY:malformed description
DESCRIPTION:description with an unescaped semicolon (;)
END:VEVENT
BEGIN:VEVENT
DTSTART:20200318T084100
DURATION:PT1H30M0S
SUMMARY:empty DESCRIPTION
DESCRIPTION:
END:VEVENT
BEGIN:VTODO
PRIORITY:1
SUMMARY:an unescaped comma: ,
END:VTODO
BEGIN:VEVENT
DTSTART:20200406T221300
DURATION:PT0H15M0S
SUMMARY:Invalid STATUS
STATUS:confirmed
END:VEVENT
BEGIN:VEVENT
DTSTART:20200406T221300
DURATION:PT0H15M0S
SUMMARY:LOCATION twice
LOCATION:first
LOCATION:second
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200406
DURATION:PT0H15M0S
SUMMARY:Invalid duration (must be days or weeks)
END:VEVENT
BEGIN:VEVENT
DTSTART:20200406
DURATION:P1D
SUMMARY:Invalid DTSTART value type
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200406
SUMMARY:Invalid DTEND value type
DTEND:20200407
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200406
DURATION:P1D
RRULE:FREQ=MONTHLY;UNTIL=20201030T120000Z
SUMMARY:Invalid UNTIL value
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200406
DURATION:P1D
RRULE:FREQ=MONTHLY;UNTIL=20201030
EXDATE:20200606
SUMMARY:Invalid EXDATE value type
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200406
DURATION:P1D
RRULE:FREQ=MONTHLY;UNTIL=20201030
EXDATE;VALUE=DATE:20200606T120000Z
SUMMARY:Invalid EXDATE value
END:VEVENT
BEGIN:VTODO
SUMMARY:finally\, missing end of item
END:VCALENDAR