//Calendar implementation for the HTWK Leipzig timetable. Evaluation and display of the individual dates in iCal format. //Copyright (C) 2024 HTWKalender support@htwkalender.de //This program is free software: you can redistribute it and/or modify //it under the terms of the GNU Affero General Public License as published by //the Free Software Foundation, either version 3 of the License, or //(at your option) any later version. //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU Affero General Public License for more details. //You should have received a copy of the GNU Affero General Public License //along with this program. If not, see . package v2 import ( "github.com/pocketbase/pocketbase/tools/types" "golang.org/x/net/html" "htwkalender/data-manager/model" "htwkalender/data-manager/service/date" "htwkalender/data-manager/service/functions" "strings" ) func toEvents(tables [][]*html.Node, days []string) []model.Event { var events []model.Event for tableIndex, table := range tables { day := days[tableIndex] for _, row := range table { tableData := findTableData(row) if len(tableData) == 0 { continue } events = append(events, createEventsFromTableData(tableData, day)...) } } return events } func createEventsFromTableData(tableData []*html.Node, day string) []model.Event { var events []model.Event start, _ := types.ParseDateTime(date.CreateTimeFromHourAndMinuteString(getTextContent(tableData[1]))) end, _ := types.ParseDateTime(date.CreateTimeFromHourAndMinuteString(getTextContent(tableData[2]))) name := getTextContent(tableData[3]) if functions.OnlyWhitespace(name) { name = "Sonderveranstaltung" } courses := getTextContent(tableData[7]) if len(courses) > 0 { for _, course := range strings.Split(courses, " ") { events = append(events, model.Event{ Day: day, Week: getTextContent(tableData[0]), Start: start, End: end, Name: name, EventType: getTextContent(tableData[4]), Notes: getTextContent(tableData[5]), Prof: getTextContent(tableData[6]), Rooms: getTextContent(tableData[8]), BookedAt: getTextContent(tableData[10]), Course: strings.TrimSpace(course), }) } } return events }