[Tickets #13113] CalDAV/etag won't change after 2nd change in Kronolith
noreply at bugs.horde.org
noreply at bugs.horde.org
Mon Apr 14 09:05:40 UTC 2014
DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED.
Ticket URL: http://bugs.horde.org/ticket/13113
------------------------------------------------------------------------------
Ticket | 13113
Created By | skhorde at smail.inf.fh-bonn-rhein-sieg.de
Summary | CalDAV/etag won't change after 2nd change in Kronolith
Queue | Kronolith
Version | 4.1.5
Type | Bug
State | Unconfirmed
Priority | 2. Medium
Milestone |
Patch | 1
Owners |
------------------------------------------------------------------------------
skhorde at smail.inf.fh-bonn-rhein-sieg.de (2014-04-14 09:05) wrote:
I'm using:
kronolith 4.1.5 stable
horde 5.1.6 stable
Horde_Dav 1.0.4 stable
PEAR does not list any outstanding upgrades.
If I delete the user data of user "user", login, create a new event
and add the standard calendar to KDE Akonadi via CalDAV, that event is
sync'ed to KDE. Then I change the start time in Kronolith, the change
is sync'ed to KDE again. Then I change one or more times again in the
GUI only, those changes are not sync'ed to KDE.
If I change the event in KDE's Korganiser, the change is sync'ed to
Kronolith, then I can change the event in the GUI one time again in
order to sync it back to KDE.
The horde_histories table contains entries of change of the GUI, e.g.:
67138 |
kronolith:lRKXIP8i9MAv6KDdx3OFew1:20140414091444.DpToeX4M_xh0ohIpZIDZpQ2 at ... |
modify | ... | a:2:{s:3:"new";a:10:{s ...
I sniffed the CalDAV connection, in the 207 Multi-Status reponses of
the REPORT requests, I get:
<d:response>
<d:href>/horde/rpc.php/calendars/user/calendar:lRKXIP8i9MAv6KDdx3OFew1/HOu4xpua-p9SaC_JViE0Iw1.ics</d:href>
<d:propstat><d:prop><d:getetag>"abb796829cd0403ee6c3f0a25270ad30"</d:getetag>
<d:resourcetype/></d:prop>
<d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response>
The etag does not change beginning with the 2nd change of an event in
Kronolith, no matter how often I change the event in Kronolith or try
to re-sync the calendar from KDE. Because I understand section
"Finding out if anything changed" of
http://sabre.io/dav/building-a-caldav-client/ so, that the client may
use the etag to find changes, the KDE does not request the event
again, because the etag stays the same as the previous request.
=====
KDE Akonadi uses this REPORT request:
REPORT /horde/rpc.php/calendars/user/calendar:lRKXIP8i9MAv6KDdx3OFew1/
HTTP/1.1\r\n
<calendar-query xmlns="urn:ietf:params:xml:ns:caldav">
<prop xmlns="DAV:">
<getetag xmlns="DAV:"/>
<resourcetype xmlns="DAV:"/>
</prop>
<filter xmlns="urn:ietf:params:xml:ns:caldav">
<comp-filter xmlns="urn:ietf:params:xml:ns:caldav" name="VCALENDAR">
<comp-filter xmlns="urn:ietf:params:xml:ns:caldav" name="VEVENT"/>
</comp-filter>
</filter>
</calendar-query>
====
In Kronolith_Event::loadHistory() the modified entries are in that order:
loadHistory()
loadHistory(modified)=1397465499 who=user
loadHistory(modified)=1397464675 who=user
loadHistory(modified)=1397460856 who=user
loadHistory(modified)=1397460722 who=user
loadHistory(modified)=1397459781 who=user
loadHistory(modified)=1397459749 who=user
loadHistory(modified)=1397459728 who=user
The last one wins, which is the one with the smallest / eldest
timestamp. Because of this the etag remains unchanged and KDE does not
queries the event data. Attached patch compares the timestamps of all
items returned and evaluates the highest / youngest timestamp only.
This change fixes my problem.
skhorde at smail.inf.fh-bonn-rhein-sieg.de (2014-04-14 09:05) uploaded:
kronolith_loadHistory_youngest-modified.diff.bz2
http://bugs.horde.org/h/services/download/?app=whups&actionID=download_file&file=kronolith_loadHistory_youngest-modified.diff.bz2&ticket=13113&fn=%2Fkronolith_loadHistory_youngest-modified.diff.bz2
More information about the bugs
mailing list