Bug 296489

Summary: Picks the wrong one from double VEVENTs
Product: [Frameworks and Libraries] Akonadi Reporter: Michael Reiher <redm>
Component: DAV ResourceAssignee: kdepim bugs <kdepim-bugs>
Status: RESOLVED FIXED    
Severity: normal CC: kde-bugs, matthieu
Priority: NOR    
Version: 1.9.80   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In: 4.14.1
Sentry Crash Report:

Description Michael Reiher 2012-03-21 11:36:41 UTC
User-Agent:       Mozilla/5.0 (X11; Linux x86_64) KHTML/4.8.1 (like Gecko) Konqueror/4.8
Build Identifier: 

I'm not sure if the problem is in the DAV resource, but this was my best guess. Please reassign as appropriate.

I use Akonadi/CalDAV to connect to a Exchange 2010 server via DavMail. I'm seeing a problem with recurring events. Only the first occurrence is shown in KOrganizer. 

When I fetch the event file manually with wget via DavMail I see two VEVENT sections in it. One with lots of info like DESCRIPTION, ATTENDEEs and RRULE, and one with only very basic info (and no RRULE).

When I look in akonadiconsole at the event file it contains only the latter, basic VEVENT section. And thus KOrganizer can't show the info, obviously.

So it seems at some point the interesting VEVENT section gets lost.

And could this have something to do with #286139?

Reproducible: Always
Comment 1 Michael Reiher 2012-03-21 11:39:07 UTC
This is with KDE 4.8.1, Akonadi 1.7.0, btw.
Comment 2 Grégory Oestreicher 2012-11-05 17:40:27 UTC
*** Bug 309358 has been marked as a duplicate of this bug. ***
Comment 3 Philipp Schmidt 2013-07-01 10:49:02 UTC
Also happens using ownCloud 4.5.

As many other clients, especially the Android-Calendars do not make use of the EXDATE-property  for exceptions but rather create an additional VEVENT with the same UID and a STATUS=CANCELLED property (DATE set to the datetime of the exception) this leads to the strange behaviour the the most recent exception (=cancelled event) actually shows up, while the event with the recurrence rule does not.

Here are the contents of the ICS file as provided by the server:

BEGIN:VCALENDAR
PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN
VERSION:2.0
X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20130701T102631Z
SUMMARY:Testevent
LOCATION:Recurring
DTSTART;TZID=Europe/Berlin:20130701T130000
TRANSP:OPAQUE
RRULE:FREQ=DAILY;COUNT=5
DESCRIPTION:Some description...
STATUS:CONFIRMED
DURATION:PT1H
LAST-MODIFIED:20130701T104357Z
DTSTAMP:20130701T104357Z
SEQUENCE:1
UID:c40cc3a9-c079-4fce-9ef4-507574529cfa
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Berlin:20130704T130000
SUMMARY:Testevent
STATUS:CANCELLED
TRANSP:TRANSPARENT
DTEND;TZID=Europe/Berlin:20130704T140000
LAST-MODIFIED:20130701T102805Z
DTSTAMP:20130701T102805Z
SEQUENCE:1
RECURRENCE-ID:20130704T110000Z
UID:c40cc3a9-c079-4fce-9ef4-507574529cfa
END:VEVENT
END:VCALENDAR

And here the content as displayed by akonadi-console:

BEGIN:VCALENDAR
PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN
VERSION:2.0
X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0
BEGIN:VEVENT
DTSTAMP:20130701T102805Z
CREATED:20130701T104550Z
UID:c40cc3a9-c079-4fce-9ef4-507574529cfa
SEQUENCE:1
LAST-MODIFIED:20130701T102805Z
SUMMARY:Testevent
STATUS:CANCELLED
RECURRENCE-ID:20130704T110000Z
DTSTART;TZID=Europe/Berlin:20130704T130000
DTEND;TZID=Europe/Berlin:20130704T140000
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE

END:VCALENDAR

PS: The calendar had a bug that meant that cancelled events were still displayed (Bug 282591). This has been fixed in 4.10.90.
Comment 4 Grégory Oestreicher 2014-09-05 18:21:25 UTC
Git commit b8e7333eabe9765e23b89a936d50000fc9f027d0 by Grégory Oestreicher.
Committed on 05/09/2014 at 18:18.
Pushed by goestreicher into branch 'KDE/4.14'.

Parse resources containing multiple VEVENT

If the VCALENDAR contains multiple VEVENT then parse them
and apply exceptions accordingly. Updates and deletions
also preserve the multiple VEVENT in a single resource.

Thanks to Philipp Schmidt and Martyn Kyral for their work
to provide an initial patch on which to elaborate further.
Related: bug 284884
REVIEW: 114357
FIXED-IN: 4.14.1

M  +90   -3    resources/dav/common/davutils.cpp
M  +8    -1    resources/dav/common/davutils.h
M  +5    -0    resources/dav/common/etagcache.cpp
M  +5    -0    resources/dav/common/etagcache.h
M  +176  -70   resources/dav/resource/davgroupwareresource.cpp
M  +16   -3    resources/dav/resource/davgroupwareresource.h

http://commits.kde.org/kdepim-runtime/b8e7333eabe9765e23b89a936d50000fc9f027d0