fix: sort scraped schedule entries by time within each day

This commit is contained in:
2026-05-30 13:12:46 +02:00
parent 9321f36a0f
commit 2e3650b77b

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"mal/integrations/animeschedule" "mal/integrations/animeschedule"
"sort"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@@ -68,15 +69,27 @@ func buildScheduleDays(schedule animeschedule.WeekSchedule, year int, week int)
out := make([]scheduleDayView, 0, 7) out := make([]scheduleDayView, 0, 7)
for i, wd := range order { for i, wd := range order {
date := start.AddDate(0, 0, i) date := start.AddDate(0, 0, i)
entries := schedule.Days[wd]
sort.SliceStable(entries, func(i, j int) bool {
return localTimeMinutes(entries[i].LocalTime) < localTimeMinutes(entries[j].LocalTime)
})
out = append(out, scheduleDayView{ out = append(out, scheduleDayView{
DateLabel: strings.ToUpper(date.Format("02 Jan")), DateLabel: strings.ToUpper(date.Format("02 Jan")),
WeekdayLabel: wd.String(), WeekdayLabel: wd.String(),
Entries: schedule.Days[wd], Entries: entries,
}) })
} }
return out return out
} }
func localTimeMinutes(localTime string) int {
t, err := time.Parse("03:04 PM", localTime)
if err != nil {
return 0
}
return t.Hour()*60 + t.Minute()
}
func isoWeekStartMonday(year int, week int) time.Time { func isoWeekStartMonday(year int, week int) time.Time {
// ISO week 1 is the week with the year's first Thursday in it. // ISO week 1 is the week with the year's first Thursday in it.
jan4 := time.Date(year, 1, 4, 12, 0, 0, 0, time.Local) jan4 := time.Date(year, 1, 4, 12, 0, 0, 0, time.Local)