From 794fb1816dd1f7a6ad2b42f4f461fef7828d2aee Mon Sep 17 00:00:00 2001 From: Thales Oliveira Date: Mon, 4 Jun 2018 15:26:42 -0300 Subject: [PATCH 1/2] Handle multiple EXDATE The EXDATE property can be defined multiple times by having only one clause with dates separated by commas. (e.g.: `EXDATE;TZID=Pacific Standard Time:20180504T133000,20180601T133000`) --- parse.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/parse.go b/parse.go index 7698cb6..9afd814 100644 --- a/parse.go +++ b/parse.go @@ -651,23 +651,28 @@ func parseExcludedDates(eventData string, convertDatesToUTC bool) ([]time.Time, return nil, err } - dt := strings.TrimSpace(e[2]) - if !strings.Contains(dt, "Z") { - dt += "Z" - } + dts := strings.Split(e[2], ",") - t, err := time.Parse(icsFormat, dt) - if err != nil { - return nil, err - } + for _, dt := range dts { + dt = strings.TrimSpace(dt) - t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), tz) + if !strings.Contains(dt, "Z") { + dt += "Z" + } - if convertDatesToUTC { - t = t.UTC() - } + t, err := time.Parse(icsFormat, dt) + if err != nil { + return nil, err + } + + t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), tz) - dates = append(dates) + if convertDatesToUTC { + t = t.UTC() + } + + dates = append(dates, t) + } } return dates, nil From 3bdff53015e8bc0042a2fc0543ad2f439f3603fd Mon Sep 17 00:00:00 2001 From: Thales Oliveira Date: Mon, 11 Jun 2018 18:06:05 -0300 Subject: [PATCH 2/2] Handle EXDATE rules spaning multiple lines --- parse.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse.go b/parse.go index 9afd814..401e712 100644 --- a/parse.go +++ b/parse.go @@ -639,7 +639,7 @@ func parseEventRRule(eventData string) string { func parseExcludedDates(eventData string, convertDatesToUTC bool) ([]time.Time, error) { var dates []time.Time - excl := eventExDateRegex.FindAllStringSubmatch(eventData, -1) + excl := eventExDateRegex.FindAllStringSubmatch(strings.Replace(eventData, "\n", "", -1), -1) for _, e := range excl { if len(e) < 3 {