Merge branch 'webcal'
This commit is contained in:
		| @@ -85,7 +85,7 @@ def xml_propfind_response( | ||||
|  | ||||
|     if isinstance(item, storage.BaseCollection): | ||||
|         is_collection = True | ||||
|         is_leaf = item.tag in ("VADDRESSBOOK", "VCALENDAR") | ||||
|         is_leaf = item.tag in ("VADDRESSBOOK", "VCALENDAR", "VSUBSCRIBED") | ||||
|         collection = item | ||||
|         # Some clients expect collections to end with `/` | ||||
|         uri = pathutils.unstrip_path(item.path, True) | ||||
| @@ -259,6 +259,10 @@ def xml_propfind_response( | ||||
|                         child_element = ET.Element( | ||||
|                             xmlutils.make_clark("C:calendar")) | ||||
|                         element.append(child_element) | ||||
|                     elif item.get_meta("tag") == "VSUBSCRIBED": | ||||
|                         child_element = ET.Element( | ||||
|                             xmlutils.make_clark("CS:subscribed")) | ||||
|                         element.append(child_element) | ||||
|                 child_element = ET.Element(xmlutils.make_clark("D:collection")) | ||||
|                 element.append(child_element) | ||||
|             elif tag == xmlutils.make_clark("RADICALE:displayname"): | ||||
| @@ -286,6 +290,14 @@ def xml_propfind_response( | ||||
|                     element.text, _ = collection.sync() | ||||
|                 else: | ||||
|                     is404 = True | ||||
|             elif tag == xmlutils.make_clark("CS:source"): | ||||
|                 if is_leaf: | ||||
|                     child_element = ET.Element(xmlutils.make_clark("D:href")) | ||||
|                     child_element.text = item.get_meta('CS:source') | ||||
|                     element.append(child_element) | ||||
|                 else: | ||||
|                     is404 = True | ||||
|                          | ||||
|             else: | ||||
|                 human_tag = xmlutils.make_human_tag(tag) | ||||
|                 tag_text = collection.get_meta(human_tag) | ||||
|   | ||||
| @@ -91,7 +91,7 @@ def check_and_sanitize_items( | ||||
|     The ``tag`` of the collection. | ||||
|  | ||||
|     """ | ||||
|     if tag and tag not in ("VCALENDAR", "VADDRESSBOOK"): | ||||
|     if tag and tag not in ("VCALENDAR", "VADDRESSBOOK", "VSUBSCRIBED"): | ||||
|         raise ValueError("Unsupported collection tag: %r" % tag) | ||||
|     if not is_collection and len(vobject_items) != 1: | ||||
|         raise ValueError("Item contains %d components" % len(vobject_items)) | ||||
| @@ -230,7 +230,7 @@ def check_and_sanitize_props(props: MutableMapping[Any, Any] | ||||
|             raise ValueError("Value of %r must be %r not %r: %r" % ( | ||||
|                 k, str.__name__, type(v).__name__, v)) | ||||
|         if k == "tag": | ||||
|             if v not in ("", "VCALENDAR", "VADDRESSBOOK"): | ||||
|             if v not in ("", "VCALENDAR", "VADDRESSBOOK", "VSUBSCRIBED"): | ||||
|                 raise ValueError("Unsupported collection tag: %r" % v) | ||||
|     return props | ||||
|  | ||||
|   | ||||
| @@ -33,7 +33,8 @@ from radicale import item, pathutils | ||||
|  | ||||
| MIMETYPES: Mapping[str, str] = { | ||||
|     "VADDRESSBOOK": "text/vcard", | ||||
|     "VCALENDAR": "text/calendar"} | ||||
|     "VCALENDAR": "text/calendar", | ||||
|     "VSUBSCRIBED": "text/calendar"} | ||||
|  | ||||
| OBJECT_MIMETYPES: Mapping[str, str] = { | ||||
|     "VCARD": "text/vcard", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user