ical-org / ical.net

ical.NET - an open source iCal library for .NET
MIT License
784 stars 231 forks source link

CalendarEvent mixes up `DURATION` and `DTEND` on deserialization #574

Open minichma opened 1 year ago

minichma commented 1 year ago

In Ical.Net VEVENT components are deserialized into CalendarEvent objects. During the deserialization process the DURATION property is extrapolated into DTEND and vice versa. I.e. one is calculated out of the other, so after deserialziation both are present. The information, which of both was contained in the original VEVENT component is lost during deserialization.

This is a problem when it comes to recurring events, because according to RFC 5545 recurrence sets are generated differently depending on which of both was used to specify the duration.

See https://www.rfc-editor.org/rfc/rfc5545#section-3.8.5.3:

      If the duration of the recurring component is specified with the
      "DTEND" or "DUE" property, then the same exact duration will apply
      to all the members of the generated recurrence set.  Else, if the
      duration of the recurring component is specified with the
      "DURATION" property, then the same nominal duration will apply to
      all the members of the generated recurrence set and the exact
      duration of each recurrence instance will depend on its specific
      start time.

Suggestion: During deserialization retain the information, which property (DURATION, DTEND, DUE) was used to specify an VEVENT's duration.

axunonb commented 2 days ago

Appreciate a PR. Please double-check the new version merged with #595