1
0
mirror of https://github.com/etesync/android synced 2024-12-23 07:08:16 +00:00

CalDAV: ignore collections without VEVENT support (for instance, VTODO collections)

This commit is contained in:
rfc2822 2013-11-30 00:06:16 +01:00
parent 8f7b48748b
commit 3cbfcbee9b
4 changed files with 50 additions and 12 deletions

View File

@ -182,6 +182,15 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC
for (WebDavResource resource : homeSetCalendars.getMembers())
if (resource.isCalendar()) {
Log.i(TAG, "Found calendar: " + resource.getLocation().getRawPath());
if (resource.getSupportedComponents() != null) {
// CALDAV:supported-calendar-component-set available
boolean supportsEvents = false;
for (String supportedComponent : resource.getSupportedComponents())
if (supportedComponent.equalsIgnoreCase("VEVENT"))
supportsEvents = true;
if (!supportsEvents) // ignore collections without VEVENT support
continue;
}
ServerInfo.ResourceInfo info = new ServerInfo.ResourceInfo(
ServerInfo.ResourceInfo.Type.CALENDAR,
resource.getLocation().getRawPath(),

View File

@ -7,9 +7,13 @@
******************************************************************************/
package at.bitfire.davdroid.webdav;
import java.util.List;
import lombok.Getter;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Text;
@ -44,6 +48,9 @@ public class DavProp {
@Element(required=false,name="calendar-timezone")
DavPropCalendarTimezone calendarTimezone;
@Element(required=false,name="supported-calendar-component-set")
DavPropSupportedCalendarComponentSet supportedCalendarComponentSet;
@Element(required=false)
DavPropGetCTag getctag;
@ -117,6 +124,18 @@ public class DavProp {
@Getter private String timezone;
}
@Namespace(prefix="C",reference="urn:ietf:params:xml:ns:caldav")
public static class DavPropSupportedCalendarComponentSet {
@ElementList(inline=true,entry="comp",required=false)
List<DavPropComp> components;
}
@Namespace(prefix="C",reference="urn:ietf:params:xml:ns:caldav")
public static class DavPropComp {
@Attribute
@Getter String name;
}
@Namespace(prefix="CS",reference="http://calendarserver.org/ns/")
public static class DavPropGetCTag {
@Text(required=false)

View File

@ -55,6 +55,7 @@ public class HttpPropfind extends HttpEntityEnclosingRequestBase {
propfind.prop.calendarDescription = new DavProp.DavPropCalendarDescription();
propfind.prop.calendarColor = new DavProp.DavPropCalendarColor();
propfind.prop.calendarTimezone = new DavProp.DavPropCalendarTimezone();
propfind.prop.supportedCalendarComponentSet = new DavProp.DavPropSupportedCalendarComponentSet();
break;
case COLLECTION_CTAG:
depth = 0;

View File

@ -48,6 +48,7 @@ import org.simpleframework.xml.core.Persister;
import android.util.Log;
import at.bitfire.davdroid.URIUtils;
import at.bitfire.davdroid.resource.Event;
import at.bitfire.davdroid.webdav.DavProp.DavPropComp;
@ToString
@ -57,7 +58,7 @@ public class WebDavResource {
public enum Property {
CURRENT_USER_PRINCIPAL,
DISPLAY_NAME, DESCRIPTION, COLOR,
TIMEZONE,
TIMEZONE, SUPPORTED_COMPONENTS,
ADDRESSBOOK_HOMESET, CALENDAR_HOMESET,
IS_ADDRESSBOOK, IS_CALENDAR,
CTAG, ETAG,
@ -81,6 +82,7 @@ public class WebDavResource {
// DAV properties
protected HashMap<Property, String> properties = new HashMap<Property, String>();
@Getter protected List<String> supportedComponents;
// list of members (only for collections)
@Getter protected List<WebDavResource> members;
@ -415,39 +417,46 @@ public class WebDavResource {
continue;
DavProp prop = singlePropstat.prop;
HashMap<Property, String> properties = referenced.properties;
if (prop.currentUserPrincipal != null && prop.currentUserPrincipal.getHref() != null)
referenced.properties.put(Property.CURRENT_USER_PRINCIPAL, prop.currentUserPrincipal.getHref().href);
properties.put(Property.CURRENT_USER_PRINCIPAL, prop.currentUserPrincipal.getHref().href);
if (prop.addressbookHomeSet != null && prop.addressbookHomeSet.getHref() != null)
referenced.properties.put(Property.ADDRESSBOOK_HOMESET, prop.addressbookHomeSet.getHref().href);
properties.put(Property.ADDRESSBOOK_HOMESET, prop.addressbookHomeSet.getHref().href);
if (singlePropstat.prop.calendarHomeSet != null && prop.calendarHomeSet.getHref() != null)
referenced.properties.put(Property.CALENDAR_HOMESET, prop.calendarHomeSet.getHref().href);
properties.put(Property.CALENDAR_HOMESET, prop.calendarHomeSet.getHref().href);
if (prop.displayname != null)
referenced.properties.put(Property.DISPLAY_NAME, prop.displayname.getDisplayName());
properties.put(Property.DISPLAY_NAME, prop.displayname.getDisplayName());
if (prop.resourcetype != null) {
if (prop.resourcetype.getAddressbook() != null) {
referenced.properties.put(Property.IS_ADDRESSBOOK, "1");
properties.put(Property.IS_ADDRESSBOOK, "1");
if (prop.addressbookDescription != null)
referenced.properties.put(Property.DESCRIPTION, prop.addressbookDescription.getDescription());
properties.put(Property.DESCRIPTION, prop.addressbookDescription.getDescription());
} else
referenced.properties.remove(Property.IS_ADDRESSBOOK);
properties.remove(Property.IS_ADDRESSBOOK);
if (prop.resourcetype.getCalendar() != null) {
referenced.properties.put(Property.IS_CALENDAR, "1");
properties.put(Property.IS_CALENDAR, "1");
if (prop.calendarDescription != null)
referenced.properties.put(Property.DESCRIPTION, prop.calendarDescription.getDescription());
properties.put(Property.DESCRIPTION, prop.calendarDescription.getDescription());
if (prop.calendarColor != null)
referenced.properties.put(Property.COLOR, prop.calendarColor.getColor());
properties.put(Property.COLOR, prop.calendarColor.getColor());
if (prop.calendarTimezone != null)
referenced.properties.put(Property.TIMEZONE, Event.TimezoneDefToTzId(prop.calendarTimezone.getTimezone()));
properties.put(Property.TIMEZONE, Event.TimezoneDefToTzId(prop.calendarTimezone.getTimezone()));
if (prop.supportedCalendarComponentSet != null && prop.supportedCalendarComponentSet.components != null) {
referenced.supportedComponents = new LinkedList<String>();
for (DavPropComp component : prop.supportedCalendarComponentSet.components)
referenced.supportedComponents.add(component.getName());
}
} else
referenced.properties.remove(Property.IS_CALENDAR);
}