diff --git a/backend/webdav/api/types.go b/backend/webdav/api/types.go index eab79dccf..8fe89279d 100644 --- a/backend/webdav/api/types.go +++ b/backend/webdav/api/types.go @@ -69,7 +69,7 @@ type Prop struct { Status []string `xml:"DAV: status"` Name string `xml:"DAV: prop>displayname,omitempty"` Type *xml.Name `xml:"DAV: prop>resourcetype>collection,omitempty"` - IsCollection *int `xml:"DAV: prop>iscollection,omitempty"` // this is a Microsoft extension see #2716 + IsCollection *string `xml:"DAV: prop>iscollection,omitempty"` // this is a Microsoft extension see #2716 Size int64 `xml:"DAV: prop>getcontentlength,omitempty"` Modified Time `xml:"DAV: prop>getlastmodified,omitempty"` Checksums []string `xml:"prop>checksums>checksum,omitempty"` diff --git a/backend/webdav/webdav.go b/backend/webdav/webdav.go index 54e11f505..889da8cdf 100644 --- a/backend/webdav/webdav.go +++ b/backend/webdav/webdav.go @@ -173,9 +173,16 @@ func itemIsDir(item *api.Response) bool { fs.Debugf(nil, "Unknown resource type %q/%q on %q", t.Space, t.Local, item.Props.Name) } // the iscollection prop is a Microsoft extension, but if present it is a reliable indicator - // if the above check failed - see #2716 + // if the above check failed - see #2716. This can be an integer or a boolean - see #2964 if t := item.Props.IsCollection; t != nil { - return *t != 0 + switch x := strings.ToLower(*t); x { + case "0", "false": + return false + case "1", "true": + return true + default: + fs.Debugf(nil, "Unknown value %q for IsCollection", x) + } } return false }