From baf63fb1b759d0e433c68b41f1c0b824079a1d77 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 5 Feb 2020 18:05:48 +0100 Subject: [PATCH] caldav: parse iCal data --- caldav/caldav.go | 4 +++- caldav/client.go | 15 ++++++++++++++- go.mod | 5 ++++- go.sum | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/caldav/caldav.go b/caldav/caldav.go index ee33bcb..5f42e9f 100644 --- a/caldav/caldav.go +++ b/caldav/caldav.go @@ -5,6 +5,8 @@ package caldav import ( "time" + + "github.com/luxifer/ical" ) type Calendar struct { @@ -39,5 +41,5 @@ type CalendarObject struct { Path string ModTime time.Time ETag string - Data []byte + Data *ical.Calendar } diff --git a/caldav/client.go b/caldav/client.go index 6c42556..7f86399 100644 --- a/caldav/client.go +++ b/caldav/client.go @@ -1,12 +1,14 @@ package caldav import ( + "bytes" "fmt" "net/http" "time" "github.com/emersion/go-webdav" "github.com/emersion/go-webdav/internal" + "github.com/luxifer/ical" ) // Client provides access to a remote CardDAV server. @@ -178,11 +180,22 @@ func decodeCalendarObjectList(ms *internal.Multistatus) ([]CalendarObject, error return nil, err } + // Normalize line endings + // TODO: make the ical package less strict + b := calData.Data + b = bytes.ReplaceAll(b, []byte{'\r', '\n'}, []byte{'\n'}) + b = bytes.ReplaceAll(b, []byte{'\n'}, []byte{'\r', '\n'}) + + data, err := ical.Parse(bytes.NewReader(b), nil) + if err != nil { + return nil, err + } + addrs = append(addrs, CalendarObject{ Path: path, ModTime: time.Time(getLastMod.LastModified), ETag: string(getETag.ETag), - Data: calData.Data, + Data: data, }) } diff --git a/go.mod b/go.mod index 13d36df..04c3ce3 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,7 @@ module github.com/emersion/go-webdav go 1.13 -require github.com/emersion/go-vcard v0.0.0-20191221110513-5f81fa0d3cc7 +require ( + github.com/emersion/go-vcard v0.0.0-20191221110513-5f81fa0d3cc7 + github.com/luxifer/ical v0.0.0-20191105105432-84b768eb6395 +) diff --git a/go.sum b/go.sum index fdc26f8..c0e8232 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,4 @@ github.com/emersion/go-vcard v0.0.0-20191221110513-5f81fa0d3cc7 h1:SE+tcd+0kn0cT4MqTo66gmkjqWHF1Z+Yha5/rhLs/H8= github.com/emersion/go-vcard v0.0.0-20191221110513-5f81fa0d3cc7/go.mod h1:HMJKR5wlh/ziNp+sHEDV2ltblO4JD2+IdDOWtGcQBTM= +github.com/luxifer/ical v0.0.0-20191105105432-84b768eb6395 h1:H7Rbug09BDCzr6k/PASDjSMjbJGzXswwqesaDiBNJz8= +github.com/luxifer/ical v0.0.0-20191105105432-84b768eb6395/go.mod h1:TGCe94U3u9fXQl4yHJ8W87z1czj057aVLxYnFYTDC08=