caldav: add Content-Length support to client

Follow-up for https://github.com/emersion/go-webdav/pull/83.
This commit is contained in:
Simon Ser 2022-05-24 10:14:39 +02:00
parent 38a35d3545
commit 9ed4abce57

View File

@ -191,6 +191,11 @@ func decodeCalendarObjectList(ms *internal.Multistatus) ([]CalendarObject, error
return nil, err return nil, err
} }
var getContentLength internal.GetContentLength
if err := resp.DecodeProp(&getContentLength); err != nil && !internal.IsNotFound(err) {
return nil, err
}
r := bytes.NewReader(calData.Data) r := bytes.NewReader(calData.Data)
data, err := ical.NewDecoder(r).Decode() data, err := ical.NewDecoder(r).Decode()
if err != nil { if err != nil {
@ -200,6 +205,7 @@ func decodeCalendarObjectList(ms *internal.Multistatus) ([]CalendarObject, error
addrs = append(addrs, CalendarObject{ addrs = append(addrs, CalendarObject{
Path: path, Path: path,
ModTime: time.Time(getLastMod.LastModified), ModTime: time.Time(getLastMod.LastModified),
ContentLength: getContentLength.Length,
ETag: string(getETag.ETag), ETag: string(getETag.ETag),
Data: data, Data: data,
}) })
@ -277,6 +283,13 @@ func populateCalendarObject(co *CalendarObject, resp *http.Response) error {
} }
co.ETag = etag co.ETag = etag
} }
if contentLength := resp.Header.Get("Content-Length"); contentLength != "" {
n, err := strconv.ParseInt(contentLength, 10, 64)
if err != nil {
return err
}
co.ContentLength = n
}
if lastModified := resp.Header.Get("Last-Modified"); lastModified != "" { if lastModified := resp.Header.Get("Last-Modified"); lastModified != "" {
t, err := http.ParseTime(lastModified) t, err := http.ParseTime(lastModified)
if err != nil { if err != nil {