Bug 313368 - recurrence exceptions break syncing
Summary: recurrence exceptions break syncing
Status: RESOLVED FIXED
Alias: None
Product: Akonadi
Classification: Frameworks and Libraries
Component: Google Resource (show other bugs)
Version: 4.10
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Daniel Vrátil
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-01-16 15:26 UTC by Christian Mollekopf
Modified: 2013-02-28 12:53 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 4.11


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Mollekopf 2013-01-16 15:26:18 UTC
If I add an exception to a recurring event (i.e. make one recurrence a bit longer than the rest), the google resource stops syncing. I assume this problem is because the resource assumes UID's are unique (which they mostly are but not always).

Recurrence exceptions are implemented as separate event with the same UID as the original recurring event with an additional RecurrenceID to identify the specific occurrence for which the exception applies.

This means the UID is not unique, the UID+RecurrenceID pair is though (in some cases SEQUENCE has to be considered as well to guarantee uniqueness, but here that shouldn't be a problem I think).

Note that this behavior is RFC compliant, so it's indeed a bug in the resource.

Also note that kcalcore doesn't really support exceptions yet  (AFAIK), so you'll have to use some kind of hack. I'll have to look into that for kolab as well.

Reproducible: Always
Comment 1 Philipp Hahn 2013-02-07 09:34:46 UTC
The same happens with iCalenar files: If I move an event using the Mozilla calendar application (Icedove+iceowl on Debian), the original recurring event and the exception event share the same UID. Which of them shows in Akonadi is random (latest wins?)

Looks like the _unique_-ID is not unique: <https://tools.ietf.org/html/rfc5545#section-3.8.4.4>
Comment 2 Daniel Vrátil 2013-02-07 10:22:32 UTC
The problem is partially in the Akonadi resource and partially in KCalCore that does not handle non-unique UID. I have some patch/workaround ready, but I want to do some more testing first.
Comment 3 Daniel Vrátil 2013-02-28 12:53:14 UTC
Git commit dc1d1e496990b7b65fb422f71bfe82ac751a93e4 by Dan Vrátil.
Committed on 28/02/2013 at 13:19.
Pushed by dvratil into branch 'master'.

Port Akonadi resources for Google services to LibKGAPI2

Resources now use the new job-based API, which is more
flexible and solves many problems that were very hard
to fix with the previous API.

Lot of duplicated code has been factored out and moved
to /resources/google/common.

Featurewise, Google Contacts resources now fully supports
contacts groups and fetching contacts photos has been
notably improved, Google Calendar resource has improved
tasks handling and both resources have better status and
progress reporting and should be faster and more stable.
Related: bug 301647, bug 309320, bug 310741, bug 281695, bug 294639

FIXED-IN: 4.11

DIGEST:

M  +1    -1    CMakeLists.txt
M  +1    -1    resources/google/CMakeLists.txt
M  +5    -10   resources/google/calendar/CMakeLists.txt
D  +0    -102  resources/google/calendar/calendareditor.cpp
D  +0    -55   resources/google/calendar/calendareditor.h
M  +616  -519  resources/google/calendar/calendarresource.cpp
M  +35   -78   resources/google/calendar/calendarresource.h
M  +57   -50   resources/google/calendar/defaultreminderattribute.cpp
M  +17   -20   resources/google/calendar/defaultreminderattribute.h
D  +0    -298  resources/google/calendar/resource_events.cpp
M  +0    -166  resources/google/calendar/resource_tasks.cpp
M  +2    -22   resources/google/calendar/settings.cpp
M  +3    -23   resources/google/calendar/settings.h
M  +128  -731  resources/google/calendar/settingsdialog.cpp
M  +18   -51   resources/google/calendar/settingsdialog.h
D  +0    -52   resources/google/calendar/tasklisteditor.cpp
D  +0    -49   resources/google/calendar/tasklisteditor.h
D  +0    -128  resources/google/calendar/ui/calendar_editor.ui
D  +0    -204  resources/google/calendar/ui/settingsdialog.ui
D  +0    -85   resources/google/calendar/ui/tasklist_editor.ui
A  +244  -0    resources/google/common/googleaccountmanager.cpp     [License: GPL (v2+)]
A  +67   -0    resources/google/common/googleaccountmanager.h     [License: GPL (v2+)]
A  +275  -0    resources/google/common/googleresource.cpp     [License: GPL (v3+)]
A  +109  -0    resources/google/common/googleresource.h     [License: GPL (v3+)]
A  +55   -0    resources/google/common/googlesettings.cpp     [License: GPL (v3+)]
A  +58   -0    resources/google/common/googlesettings.h     [License: GPL (v3+)]
A  +213  -0    resources/google/common/googlesettingsdialog.cpp     [License: GPL (v3+)]
A  +77   -0    resources/google/common/googlesettingsdialog.h     [License: GPL (v3+)]
M  +4    -2    resources/google/contacts/CMakeLists.txt
M  +373  -593  resources/google/contacts/contactsresource.cpp
M  +31   -69   resources/google/contacts/contactsresource.h
M  +3    -24   resources/google/contacts/settings.cpp
M  +3    -23   resources/google/contacts/settings.h
M  +19   -128  resources/google/contacts/settingsdialog.cpp
M  +5    -23   resources/google/contacts/settingsdialog.h
D  +0    -38   resources/google/contacts/ui/groupeditor.ui
D  +0    -61   resources/google/contacts/ui/settingsdialog.ui

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