summaryrefslogtreecommitdiff
path: root/pim/lib/cal/ical.go
diff options
context:
space:
mode:
Diffstat (limited to 'pim/lib/cal/ical.go')
-rw-r--r--pim/lib/cal/ical.go26
1 files changed, 20 insertions, 6 deletions
diff --git a/pim/lib/cal/ical.go b/pim/lib/cal/ical.go
index f52b333..5477030 100644
--- a/pim/lib/cal/ical.go
+++ b/pim/lib/cal/ical.go
@@ -95,29 +95,43 @@ func LoadDir(dir string) ([]*Event, error) {
return nil, err
}
sort.Strings(names)
- var evs []*Event
+ var cals []*ical.Calendar
for _, name := range names {
f, err := os.Open(name)
if err != nil {
Warnf("%s: %v", name, err)
continue
}
- cal, err := ical.NewDecoder(f).Decode()
+ c, err := ical.NewDecoder(f).Decode()
f.Close()
if err != nil {
Warnf("%s: %v", name, err)
continue
}
- for _, c := range cal.Events() {
- ev, err := newEvent(&c)
+ cals = append(cals, c)
+ }
+ return FromCalendars(cals), nil
+}
+
+// FromCalendars turns decoded iCalendar objects into events, with
+// RECURRENCE-ID overrides attached to the series they belong to.
+//
+// A backend that already holds parsed calendars -- CalDAV hands them
+// straight back from a REPORT -- comes through here rather than writing
+// them to disk first.
+func FromCalendars(cals []*ical.Calendar) []*Event {
+ var evs []*Event
+ for _, c := range cals {
+ for _, e := range c.Events() {
+ ev, err := newEvent(&e)
if err != nil {
- Warnf("%s: %v", name, err)
+ Warnf("%v", err)
continue
}
evs = append(evs, ev)
}
}
- return link(evs), nil
+ return link(evs)
}
// link attaches RECURRENCE-ID events to the series they override.