From 230c83f12465c974b9737ce6b902fbf99020453d Mon Sep 17 00:00:00 2001 From: Stefan Hacker Date: Sun, 12 Apr 2026 15:33:03 +0200 Subject: [PATCH] fix(dav): Principal-PROPFIND liefert calendars/ + addressbooks/ Container bei Depth 1 DAVx5 brauchte Kind-Container unter /dav// - sonst blieben die Listen nach Aktualisieren leer. Die Home-Sets bleiben getrennt (calendar-home-set vs addressbook-home-set), aber der Principal zeigt beide Sub-Container jetzt explizit. Co-Authored-By: Claude Opus 4.6 (1M context) --- backend/app/dav/caldav.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/backend/app/dav/caldav.py b/backend/app/dav/caldav.py index c6dcc78..824f52b 100644 --- a/backend/app/dav/caldav.py +++ b/backend/app/dav/caldav.py @@ -269,13 +269,24 @@ def propfind(subpath=''): multistatus.append(_principal_response(user)) return _xml_response(multistatus) - # /dav// : principal only (no child collections in this listing - # so clients don't mix calendars and addressbooks). Clients follow - # calendar-home-set / addressbook-home-set for the actual lists. + # /dav// : principal itself + the two sub-containers as + # collection children (calendars/ and addressbooks/). The actual + # calendar/addressbook lists live under those home-sets. if len(parts) == 1: if parts[0] != user.username: return Response('', 403) multistatus.append(_principal_response(user)) + if depth != '0': + for (sub, dn) in (('calendars', 'Kalender'), ('addressbooks', 'Adressbücher')): + container = ET.Element(_qn('d', 'response')) + ET.SubElement(container, _qn('d', 'href')).text = f'/dav/{user.username}/{sub}/' + propstat = ET.SubElement(container, _qn('d', 'propstat')) + prop = ET.SubElement(propstat, _qn('d', 'prop')) + rt = ET.SubElement(prop, _qn('d', 'resourcetype')) + ET.SubElement(rt, _qn('d', 'collection')) + ET.SubElement(prop, _qn('d', 'displayname')).text = dn + ET.SubElement(propstat, _qn('d', 'status')).text = 'HTTP/1.1 200 OK' + multistatus.append(container) return _xml_response(multistatus) # /dav//calendars/ : only calendar collections