From d645fccd8b8bde8be6dddcb41294da2a7a2dc52c Mon Sep 17 00:00:00 2001 From: Elmar Kresse <18119527+masterElmar@users.noreply.github.com> Date: Fri, 22 Sep 2023 00:12:13 +0200 Subject: [PATCH] added new ical event description --- backend/model/seminarGroup.go | 1 + backend/service/db/dbEvents.go | 87 +++++++++++++++++--------- backend/service/events/eventService.go | 15 +---- 3 files changed, 60 insertions(+), 43 deletions(-) diff --git a/backend/model/seminarGroup.go b/backend/model/seminarGroup.go index 86d2655..d9aedbc 100644 --- a/backend/model/seminarGroup.go +++ b/backend/model/seminarGroup.go @@ -21,5 +21,6 @@ type Event struct { Rooms string `db:"Rooms"` Notes string `db:"Notes"` BookedAt string `db:"BookedAt"` + Course string `db:"course"` Semester string `db:"semester"` } diff --git a/backend/service/db/dbEvents.go b/backend/service/db/dbEvents.go index e79c529..9770fbe 100644 --- a/backend/service/db/dbEvents.go +++ b/backend/service/db/dbEvents.go @@ -9,6 +9,7 @@ import ( "log" "strings" "time" + "unicode" ) func SaveEvents(seminarGroup []model.SeminarGroup, collection *models.Collection, app *pocketbase.PocketBase) ([]*models.Record, error) { @@ -130,36 +131,6 @@ func GetRoomScheduleForDay(app *pocketbase.PocketBase, room string, date string) return events } -type Events []*model.Event - -// EmitICal implements the interface for goics -func (e Events) EmitICal() goics.Componenter { - layout := "2006-01-02 15:04:05 -0700 MST" - c := goics.NewComponent() - c.SetType("VCALENDAR") - c.AddProperty("VERSION", "2.0") - c.AddProperty("CALSCAL", "GREGORIAN") - c.AddProperty("TZID", "Europe/Berlin") - c.AddProperty("X-WR-CALNAME", "HTWK Kalender") - c.AddProperty("X-WR-TIMEZONE", "Europe/Berlin") - c.AddProperty("X-LIC-LOCATION", "Europe/Berlin") - for _, event := range e { - s := goics.NewComponent() - s.SetType("VEVENT") - timeEnd, _ := time.Parse(layout, event.End) - timeStart, _ := time.Parse(layout, event.Start) - k, v := goics.FormatDateTime("DTEND;TZID=Europe/Berlin", timeEnd) - s.AddProperty(k, v) - k, v = goics.FormatDateTime("DTSTART;TZID=Europe/Berlin", timeStart) - s.AddProperty(k, v) - s.AddProperty("SUMMARY", event.Name) - s.AddProperty("DESCRIPTION", "Notizen: "+event.Notes+"\n Prof: "+event.Prof) - s.AddProperty("LOCATION", event.Rooms) - c.AddComponent(s) - } - return c -} - // gets all events for specific course and semester // TODO add filter for year func GetPlanForCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) Events { @@ -247,3 +218,59 @@ func GetAllModulesDistinct(app *pocketbase.PocketBase) ([]struct { } return eventArray, nil } + +type Events []*model.Event + +// EmitICal implements the interface for goics +func (e Events) EmitICal() goics.Componenter { + layout := "2006-01-02 15:04:05 -0700 MST" + c := goics.NewComponent() + c.SetType("VCALENDAR") + c.AddProperty("VERSION", "2.0") + c.AddProperty("CALSCAL", "GREGORIAN") + c.AddProperty("TZID", "Europe/Berlin") + c.AddProperty("X-WR-CALNAME", "HTWK Kalender") + c.AddProperty("X-WR-TIMEZONE", "Europe/Berlin") + c.AddProperty("X-LIC-LOCATION", "Europe/Berlin") + for _, event := range e { + s := goics.NewComponent() + s.SetType("VEVENT") + timeEnd, _ := time.Parse(layout, event.End) + timeStart, _ := time.Parse(layout, event.Start) + k, v := goics.FormatDateTime("DTEND;TZID=Europe/Berlin", timeEnd) + s.AddProperty(k, v) + k, v = goics.FormatDateTime("DTSTART;TZID=Europe/Berlin", timeStart) + s.AddProperty(k, v) + s.AddProperty("SUMMARY", event.Name) + s.AddProperty("DESCRIPTION", generateDescription(event)) + s.AddProperty("LOCATION", event.Rooms) + c.AddComponent(s) + } + return c +} + +func generateDescription(event *model.Event) string { + var description string + + if !CheckIfOnlyWhitespace(event.Notes) { + description += "Notizen: " + event.Notes + "\n" + } + if !CheckIfOnlyWhitespace(event.Prof) { + description += "Prof: " + event.Prof + "\n" + } + if !CheckIfOnlyWhitespace(event.Course) { + description += "Gruppe: " + event.Course + "\n" + } + + return description +} + +// check if course is empty or contains only whitespaces +func CheckIfOnlyWhitespace(word string) bool { + for _, letter := range word { + if !unicode.IsSpace(letter) || !(letter == int32(160)) { + return false + } + } + return true +} diff --git a/backend/service/events/eventService.go b/backend/service/events/eventService.go index e2fcbd8..daf1a1c 100644 --- a/backend/service/events/eventService.go +++ b/backend/service/events/eventService.go @@ -4,7 +4,6 @@ import ( "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "htwkalender/service/db" - "unicode" ) func GetModulesForCourseDistinct(app *pocketbase.PocketBase, c echo.Context, course string, semester string) error { @@ -22,7 +21,7 @@ func GetModulesForCourseDistinct(app *pocketbase.PocketBase, c echo.Context, cou func replaceEmptyEntryInStringArray(modules []string, replacement string) { //replace empty string with "Sonderveranstaltungen" for i, module := range modules { - if checkIfOnlyWhitespace(module) { + if db.CheckIfOnlyWhitespace(module) { modules[i] = replacement } } @@ -34,22 +33,12 @@ func replaceEmptyEntry(modules []struct { }, replacement string) { //replace empty string with "Sonderveranstaltungen" for i, module := range modules { - if checkIfOnlyWhitespace(module.Name) { + if db.CheckIfOnlyWhitespace(module.Name) { modules[i].Name = replacement } } } -// check if course is empty or contains only whitespaces -func checkIfOnlyWhitespace(word string) bool { - for _, letter := range word { - if !unicode.IsSpace(letter) || !(letter == int32(160)) { - return false - } - } - return true -} - func GetAllModulesDistinct(app *pocketbase.PocketBase, c echo.Context) error { modules, err := db.GetAllModulesDistinct(app)