2014-10-08 2 views
0

Пользователь SyncEvolution пользователь сообщил о проблемах с зеркалированием локального календаря в Календаре Google: при обновлении Календаря Google через CalDAV (= УДАЛИТЬ все события и воссоздать с помощью PUT) некоторые команды PUT выходят из строя с «404 Not Found», ,Google CalDAV: воссоздать встречу

Похоже, это происходит для VEVENT, у которых есть ОРГАНИЗАТОР (т. Е. Встречи). Он работает для более простых VEVENT, у которых нет ORGANIZER. Пример отказа ниже.

Я считаю, что это известное ограничение Google CalDAV. Возникает вопрос: что можно сделать для поддержки этого варианта использования, как на клиенте, так и на сервере?

Я не могу придумать обходное решение для клиента. Ошибка 404 слишком неспецифична, чтобы вызвать обходной путь, и даже если клиент может обнаружить основную причину для этого, нет другого способа воссоздания события, чем PUT, который не работает.


PUT /caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1 
Connection: TE 
TE: trailers 
Host: apidata.googleusercontent.com 
Content-Length: 928 
Content-Type: text/calendar; charset=utf-8 
User-Agent: SyncEvolution 
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

Sending request-line and headers: 
Sending request body: 
Body block (928 bytes): 
[BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.47//EN 
BEGIN:VTIMEZONE 
TZID:America/Los_Angeles 
BEGIN:STANDARD 
DTSTART:20071104T020000 
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=1SU 
TZOFFSETFROM:-0700 
TZOFFSETTO:-0800 
TZNAME:HNP 
END:STANDARD 
BEGIN:DAYLIGHT 
DTSTART:20070311T020000 
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=2SU 
TZOFFSETFROM:-0800 
TZOFFSETTO:-0700 
TZNAME:HAP 
END:DAYLIGHT 
END:VTIMEZONE 
BEGIN:VEVENT 
STATUS:CONFIRMED 
LAST-MODIFIED:20120813T184814Z 
DTSTAMP:20120813T184814Z 
UID:4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz 
SEQUENCE:0 
CLASS:PUBLIC 
TRANSP:OPAQUE 
SUMMARY:test event 
DTSTART;TZID=America/Los_Angeles:20120815T103000 
DTEND;TZID=America/Los_Angeles:20120815T113000 
ATTENDEE;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE: 
mailto:[email protected] 
ORGANIZER;CN=Joan Doe:mailto:[email protected] 
END:VEVENT 
END:VCALENDAR 
] 
Request sent; retry is 1. 
[status-line] < HTTP/1.1 201 Created 

... 

DELETE /caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1 
Connection: TE 
TE: trailers 
Host: apidata.googleusercontent.com 
Content-Length: 0 
User-Agent: SyncEvolution 
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

Sending request-line and headers: 
Request sent; retry is 1. 
[status-line] < HTTP/1.1 204 No Content 

... 

PUT /caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1 
Connection: TE 
TE: trailers 
Host: apidata.googleusercontent.com 
Content-Length: 928 
Content-Type: text/calendar; charset=utf-8 
User-Agent: SyncEvolution 
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

Sending request-line and headers: 
Sending request body: 
Body block (928 bytes): 
[BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.47//EN 
BEGIN:VTIMEZONE 
TZID:America/Los_Angeles 
BEGIN:STANDARD 
DTSTART:20071104T020000 
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=1SU 
TZOFFSETFROM:-0700 
TZOFFSETTO:-0800 
TZNAME:HNP 
END:STANDARD 
BEGIN:DAYLIGHT 
DTSTART:20070311T020000 
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=2SU 
TZOFFSETFROM:-0800 
TZOFFSETTO:-0700 
TZNAME:HAP 
END:DAYLIGHT 
END:VTIMEZONE 
BEGIN:VEVENT 
STATUS:CONFIRMED 
LAST-MODIFIED:20120813T184814Z 
DTSTAMP:20120813T184814Z 
UID:4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz 
SEQUENCE:0 
CLASS:PUBLIC 
TRANSP:OPAQUE 
SUMMARY:test event 
DTSTART;TZID=America/Los_Angeles:20120815T103000 
DTEND;TZID=America/Los_Angeles:20120815T113000 
ATTENDEE;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE: 
mailto:[email protected] 
ORGANIZER;CN=Joan Doe:mailto:[email protected] 
END:VEVENT 
END:VCALENDAR 
] 
Request sent; retry is 1. 
[status-line] < HTTP/1.1 404 Not Found 
+0

Привет Патрик, обходной путь вы можете использовать это, чтобы добавить пользователя в качестве участника. – luc

ответ

0

(я не знаю, о SyncEvolution, но, возможно, некоторые недавний опыт, я с Google календарей может пролить некоторый свет. Я не уверен, есть удовлетворительный ответ.)

Это может быть проблемой (даже без DELETE):

Предположим, пользователь U PUT - событие, в котором есть участники, но U не является организатором. Случается, что U «крадет» событие (становится организатором) и вставляет (возможно) копию только для чтения события в календарь всех остальных. Примечание: для мероприятия с ATTENDEES календарь Google делает владельца/создателя/вставку организатора. UID затем «удерживается» первым ATTENDEE, который упоминает об этом. Поскольку в календаре Google не может быть дубликатов UID, ошибка возникает на последующих PUT другими ATTENDEES.

Это становится еще хуже, когда события удаляются из одного календаря (но не все), и UID по-прежнему «удерживается» кем-то. Или удаление каким-то образом фактически не удаляет UID (что может происходить в Google Calendar).

Стратегии смягчения:

Для событий с организатором, только PUT в календаре организатора.

Как-то уникальное-римента UUID, если вы не можете выполнить выше (в результате чего события становятся несвязанные дубликатами)

Смежные вопросы