From 9ed4abce5741f71e4f82dd5cea0ca4e7f1f307a0 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 24 May 2022 10:14:39 +0200 Subject: [PATCH] caldav: add Content-Length support to client Follow-up for https://github.com/emersion/go-webdav/pull/83. --- caldav/client.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/caldav/client.go b/caldav/client.go index bcbfddf..c63f5a9 100644 --- a/caldav/client.go +++ b/caldav/client.go @@ -191,6 +191,11 @@ func decodeCalendarObjectList(ms *internal.Multistatus) ([]CalendarObject, error 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) data, err := ical.NewDecoder(r).Decode() if err != nil { @@ -198,10 +203,11 @@ func decodeCalendarObjectList(ms *internal.Multistatus) ([]CalendarObject, error } addrs = append(addrs, CalendarObject{ - Path: path, - ModTime: time.Time(getLastMod.LastModified), - ETag: string(getETag.ETag), - Data: data, + Path: path, + ModTime: time.Time(getLastMod.LastModified), + ContentLength: getContentLength.Length, + ETag: string(getETag.ETag), + Data: data, }) } @@ -277,6 +283,13 @@ func populateCalendarObject(co *CalendarObject, resp *http.Response) error { } 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 != "" { t, err := http.ParseTime(lastModified) if err != nil {