Files
htwkalender/services/data-manager/service/fetch/v2/eventParser.go
2024-06-24 15:34:24 +02:00

76 lines
2.4 KiB
Go

//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 <https://www.gnu.org/licenses/>.
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
}