mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-02 17:59:14 +02:00
Merge pull request #113 from HTWK-Leipzig/82-add-university-sports-course
fix:#82 fetched internal sport course id for unique identification
This commit is contained in:
@@ -76,7 +76,7 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event {
|
||||
|
||||
var events []model.Event
|
||||
|
||||
for i, entry := range entries {
|
||||
for _, entry := range entries {
|
||||
eventStarts, eventEnds := getWeekEvents(entry.Details.DateRange.Start, entry.Details.DateRange.End, entry.Details.Cycle)
|
||||
for j := range eventStarts {
|
||||
|
||||
@@ -84,12 +84,12 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event {
|
||||
end, _ := types.ParseDateTime(eventEnds[j].In(time.UTC))
|
||||
|
||||
var event = model.Event{
|
||||
UUID: uuid.NewSHA1(uuid.NameSpaceDNS, []byte(entry.Title+strconv.FormatInt(int64(i), 10)+entry.Details.Type)).String(),
|
||||
UUID: uuid.NewSHA1(uuid.NameSpaceDNS, []byte(entry.Title+entry.ID+entry.Details.Type)).String(),
|
||||
Day: toGermanWeekdayString(entry.Details.DateRange.Start.Weekday()),
|
||||
Week: strconv.Itoa(23),
|
||||
Start: start,
|
||||
End: end,
|
||||
Name: entry.Title + " " + entry.Details.Type,
|
||||
Name: entry.Title + " " + entry.Details.Type + " (" + entry.ID + ")",
|
||||
EventType: entry.Details.Type,
|
||||
Prof: entry.Details.CourseLead.Name,
|
||||
Rooms: entry.Details.Location.Name,
|
||||
@@ -387,6 +387,7 @@ func htmlRequest(url string) (*goquery.Document, error) {
|
||||
// May be improved in the future.
|
||||
func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
||||
var events []model.SportEntry
|
||||
germanTime, _ := time.LoadLocation("Europe/Berlin")
|
||||
|
||||
if doc.Find("h1").Text() == "Aktuelle Sportangebote" {
|
||||
return nil, errors.New("not a sport course page")
|
||||
@@ -406,6 +407,8 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
||||
details.Type = strings.TrimSpace(titleParts[len(titleParts)-1])
|
||||
}
|
||||
|
||||
event.ID = parseEventID(fullTitle)
|
||||
|
||||
s.NextFiltered("table.eventDetails").Find("tr").Each(func(i int, s *goquery.Selection) {
|
||||
key := strings.TrimSpace(s.Find("td").First().Text())
|
||||
value := strings.TrimSpace(s.Find("td").Last().Text())
|
||||
@@ -414,8 +417,8 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
||||
case "Zeitraum":
|
||||
dates := strings.Split(value, "-")
|
||||
if len(dates) == 2 {
|
||||
startDate, _ := time.Parse("02.01.2006", strings.TrimSpace(dates[0]))
|
||||
endDate, _ := time.Parse("02.01.2006", strings.TrimSpace(dates[1]))
|
||||
startDate, _ := time.ParseInLocation("02.01.2006", strings.TrimSpace(dates[0]), germanTime)
|
||||
endDate, _ := time.ParseInLocation("02.01.2006", strings.TrimSpace(dates[1]), germanTime)
|
||||
details.DateRange = model.DateRange{Start: startDate, End: endDate}
|
||||
}
|
||||
case "Zyklus":
|
||||
@@ -471,3 +474,22 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
||||
|
||||
return events, nil
|
||||
}
|
||||
|
||||
// parseEventID from fulltitle
|
||||
// the event id is a number in the fulltitle thats not a time like HH:MM and shoudl be found after Nr. or Nr:
|
||||
func parseEventID(fulltitle string) string {
|
||||
var eventID string
|
||||
var numberRegExp = regexp.MustCompile("[0-9]{1,4}")
|
||||
var fulltitleParts = strings.Split(fulltitle, " ")
|
||||
for i, part := range fulltitleParts {
|
||||
if part == "Nr." || part == "Nr:" {
|
||||
eventID = fulltitleParts[i+1]
|
||||
break
|
||||
}
|
||||
}
|
||||
if eventID == "" {
|
||||
eventID = numberRegExp.FindString(fulltitle)
|
||||
}
|
||||
return eventID
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user