From 2e3650b77b7e8386bb9e88ae30fda513084aa228 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Sat, 30 May 2026 13:12:46 +0200 Subject: [PATCH] fix: sort scraped schedule entries by time within each day --- internal/anime/schedule.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/internal/anime/schedule.go b/internal/anime/schedule.go index fa499aa..a716c31 100644 --- a/internal/anime/schedule.go +++ b/internal/anime/schedule.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "mal/integrations/animeschedule" + "sort" "strconv" "strings" "time" @@ -68,15 +69,27 @@ func buildScheduleDays(schedule animeschedule.WeekSchedule, year int, week int) out := make([]scheduleDayView, 0, 7) for i, wd := range order { 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{ DateLabel: strings.ToUpper(date.Format("02 Jan")), WeekdayLabel: wd.String(), - Entries: schedule.Days[wd], + Entries: entries, }) } 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 { // 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)