pimutils / vdirsyncer

📇 Synchronize calendars and contacts.
https://vdirsyncer.pimutils.org/
Other
1.57k stars 163 forks source link

parsing of long or multiple lines for a single entry #801

Open Konfekt opened 5 years ago

Konfekt commented 5 years ago

If a line, for example the entry LOCATION in the synced ics file contains more than 80 characters or is (broken up and then) followed by another line not pertaining to a new entry, then a client error 400 is thrown on syncing. It disappears as soon as the offending line is removed.

Calendars also have a color property

metadata = ["calendar", "blue"]

To resolve a conflict the following values are possible:

null - abort when collisions occur (default)

"a wins" - assume a's items to be more up-to-date

"b wins" - assume b's items to be more up-to-date

conflict_resolution = "a wins"

[storage CalendarLocal] type = "filesystem" path = "~/.local/share/vdirsyncer/calendars/" fileext = ".ics"

[storage CalendarRemote] type = "caldav" url = "https://spica.t-online.de" username = "konfekt@t-online.de" password.fetch = ["command", "pass", "t-online"]

* Use `vdirsyncer -vdebug` for debug output:

error: Unknown error occured for restCalendar/USER_CALENDAR-MAIN: 400 Client Error: for url: https://spica.t-online.de/spica-calendar/caldav/principals/konfekt@t-online.de/calendars/USER_CALENDAR-MAIN/120049010000000065340288-ZOOM954798596OCCURRENCE1560614400000.ics error: Use -vdebug to see the full traceback. debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/cli/utils.py", line 74, in handle_cli_error debug: raise e debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/sync/init.py", line 153, in sync debug: partial_sync debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/sync/init.py", line 274, in run debug: partial_sync) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/sync/init.py", line 177, in run debug: self._run_impl(a, b) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/sync/init.py", line 228, in _run_impl debug: self.dest.storage.update(meta.href, self.item, meta.etag) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/storage/base.py", line 15, in inner debug: return f(self, *args, *kwargs) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/storage/base.py", line 15, in inner debug: return f(self, args, kwargs) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/storage/dav.py", line 546, in update debug: href, etag = self._put(self._normalize_href(href), item, etag) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/storage/dav.py", line 520, in _put debug: headers=headers debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/storage/dav.py", line 390, in request debug: return http.request(method, url, session=self._session, more) debug: File "/usr/lib/python3.6/site-packages/vdirsyncer/http.py", line 163, in request debug: r.raise_for_status() debug: File "/home/konfekt/.local/lib/python3.6/site-packages/requests/models.py", line 935, in raise_for_status

Konfekt commented 5 years ago

This happens when the Location field contains a long string, such as

LOCATION:https://www.company.com/w/954798596?tk=gtNEFjf7rwgIiqvjpfIUI5ISptZtHp4bl4kImdaCD7Y.DQEAAAAAOOkSBBZCUEkwTUlYRlJRcTVDUGhuSFNhV

An example ics file is

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Telekom//SPICA v1
BEGIN:VEVENT
UID:108659389
ORGANIZER:Organizer
SUMMARY:Summary
LOCATION:https://www.company.com/w/954798596?tk=gtNEFjf7rwgIiqvjpfIUI5ISptZtHp4bl4kImdaCD7Y.DQEAAAAAOOkSBBZCUEkwTUlYRlJRcTVDUGhuSFNhV
PRIORITY:9
DTSTART:20181110T120000Z
DTEND:20181110T163000Z
DTSTAMP:20190312T132506Z
LAST-MODIFIED:20190602T121503Z
SEQUENCE:31
BEGIN:VALARM
TRIGGER:-P1D
ACTION:DISPLAY
DESCRIPTION:Description
END:VALARM
END:VEVENT
END:VCALENDAR