webdav: allow IsCollection property to be integer or boolean - fixes #2964

It turns out that some servers emit "true" or "false" rather than "1"
or "0" for this property, so adapt accordingly.
This commit is contained in:
Nick Craig-Wood 2019-02-10 21:31:33 +00:00
parent 2cfbc2852d
commit 1c1a8ef24b
2 changed files with 10 additions and 3 deletions

View File

@ -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"`

View File

@ -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
}