From add9f640b43e6614512c4203eea0359597465bca Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Tue, 2 Sep 2014 17:16:20 +0200 Subject: [PATCH] CalDAV: Explicitly exclude items Excluding items without mimetype "text/calendar" becomes necessary when listing items, because iCloud would re-send us the URL we issued the REPORT request on, a collection, with a mimetype of "httpd/unix-directory". debug: REPORT https://p28-caldav.icloud.com/8010146223/calendars/home/ debug: {'Depth': 'infinity', 'Content-Type': 'application/xml; charset=UTF-8', 'User-Agent': 'vdirsyncer '} debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: debug: Sending request... debug: 207 debug: {'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'server': 'iCloudCalendarServer 14F4 1', 'last-modified': 'Tue, 02 Sep 2014 13:59:11 GMT', 'dav': '1, access-control, calendar-access, calend ar-schedule, calendar-auto-schedule, calendar-managed-attachments, calendarserver-sharing, calendarserve r-subscribed, calendarserver-home-sync', 'x-transaction-id': '7f311996-32b4-11e4-a6db-78e3b5058dc0', 'da te': 'Tue, 02 Sep 2014 15:19:13 GMT', 'x-responding-server': 'mr21p28ic-hpaf05163701 18 a63660a6f7d1a25b 5a7ed66dab0da843', 'content-type': 'text/xml'} debug: debug: debug: debug: /8010146223/calendars/home/ debug: debug: debug: "FT=-@RU=301785db-0889-442c-ab5d-03144258969a@S=30" debug: httpd/unix-directory debug: debug: HTTP/1.1 200 OK debug: debug: debug: debug: debug: /8010146223/calendars/home/412580F4-7A0A-480D-BA99-73260B921E5D.ics debug: debug: debug: "C=30@U=301785db-0889-442c-ab5d-03144258969a" debug: text/calendar ... --- vdirsyncer/storage/dav.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/vdirsyncer/storage/dav.py b/vdirsyncer/storage/dav.py index 19d8069..2152502 100644 --- a/vdirsyncer/storage/dav.py +++ b/vdirsyncer/storage/dav.py @@ -410,10 +410,20 @@ class DavStorage(Storage): ) root = etree.XML(response.content) for element in root.iter('{DAV:}response'): - etag = element.find('{DAV:}propstat').find( - '{DAV:}prop').find('{DAV:}getetag').text + propstat = element.find('{DAV:}propstat') + prop = propstat.find('{DAV:}prop') + + contenttype = prop.find('{DAV:}getcontenttype').text + + etag = prop.find('{DAV:}getetag').text href = self._normalize_href(element.find('{DAV:}href').text) - yield href, etag + if self.item_mimetype not in contenttype: + dav_logger.debug( + 'Skipping item with href {!r} ' + 'because content type {!r} != {!r}.' + .format(href, contenttype, self.item_mimetype)) + else: + yield href, etag class CaldavStorage(DavStorage): @@ -520,6 +530,7 @@ class CaldavStorage(DavStorage): +