aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/ical
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2025-01-26 00:29:46 +0000
committerLeonardo Bishop <me@leonardobishop.com>2025-01-26 00:29:46 +0000
commitdd49c9205bb04844b686b9c3396c40eb49d25826 (patch)
treebabd1d90a939a7928ef02e9656ddf6ee22104f92 /pkg/ical
parent0d0a02766a59729f61c48f00e71bdae91ed64482 (diff)
Add alarms to calendar events
Diffstat (limited to 'pkg/ical')
-rw-r--r--pkg/ical/service.go37
1 files changed, 25 insertions, 12 deletions
diff --git a/pkg/ical/service.go b/pkg/ical/service.go
index a90183f..d93c846 100644
--- a/pkg/ical/service.go
+++ b/pkg/ical/service.go
@@ -2,6 +2,7 @@ package ical
import (
"errors"
+ "strconv"
"strings"
"time"
@@ -48,26 +49,38 @@ func (s *service) GenerateIcalForCalendar(calendar sqlc.Calendar) (string, error
}
now := time.Now()
+ counter := 0
// https://www.rfc-editor.org/rfc/rfc5545.html
- ret := "BEGIN:VCALENDAR\n"
- ret += "VERSION:2.0\n"
- ret += "METHOD:PUBLISH\n"
- ret += "X-WR-CALNAME:confplanner calendar\n"
+ ret := "BEGIN:VCALENDAR\r\n"
+ ret += "PRODID:-//LMBishop//confplanner//EN\r\n"
+ ret += "VERSION:2.0\r\n"
+ ret += "METHOD:PUBLISH\r\n"
+ ret += "X-WR-CALNAME:confplanner calendar\r\n"
for _, event := range events {
utcStart := event.Start.UTC()
utcEnd := event.End.UTC()
- ret += "BEGIN:VEVENT\n"
- ret += "SUMMARY:" + event.Title + "\n"
- ret += "DTSTART:" + utcStart.Format("20060102T150405Z") + "\n"
- ret += "DTEND:" + utcEnd.Format("20060102T150405Z") + "\n"
- ret += "LOCATION:" + event.Room + "\n"
- ret += "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + bluemonday.StrictPolicy().Sanitize(strings.Replace(event.Abstract, "\n", "\\n", -1)) + "\\n\\nconfplanner: last synchronised: " + now.Format(time.RFC1123) + "\n"
- ret += "END:VEVENT\n"
+ ret += "BEGIN:VEVENT\r\n"
+ ret += "SUMMARY:" + event.Title + "\r\n"
+ ret += "UID:" + now.Format("20060102T150405Z") + "-" + strconv.Itoa(counter) + "\r\n"
+ ret += "DTSTAMP:" + now.Format("20060102T150405Z") + "\r\n"
+ ret += "DTSTART:" + utcStart.Format("20060102T150405Z") + "\r\n"
+ ret += "DTEND:" + utcEnd.Format("20060102T150405Z") + "\r\n"
+ ret += "LOCATION:" + event.Room + "\r\n"
+ ret += "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + bluemonday.StrictPolicy().Sanitize(strings.Replace(event.Abstract, "\n", "\\n\\n", -1)) + "\\n\\nconfplanner: last synchronised: " + now.Format(time.RFC1123) + "\r\n"
+
+ ret += "BEGIN:VALARM\r\n"
+ ret += "TRIGGER:-PT10M\r\n"
+ ret += "ACTION:AUDIO\r\n"
+ ret += "END:VALARM\r\n"
+
+ ret += "END:VEVENT\r\n"
+
+ counter++
}
- ret += "END:VCALENDAR\n"
+ ret += "END:VCALENDAR\r\n"
return ret, nil
}