diff --git a/go/trains/cmd/train2livesplit/train2livesplit.go b/go/trains/cmd/train2livesplit/train2livesplit.go index 24dcfe9e4f..348fb7a48b 100644 --- a/go/trains/cmd/train2livesplit/train2livesplit.go +++ b/go/trains/cmd/train2livesplit/train2livesplit.go @@ -106,13 +106,16 @@ func fetchTrainOnce(ctx context.Context, id int) (*webapi.ServiceData, error) { func generateLiveSplitScriptData(sd *webapi.ServiceData) (*templateVars, error) { asf := new(strings.Builder) currentSplit := -1 - usingTime := func(td *webapi.TimingData) time.Time { + usingTime := func(td *webapi.TimingData) (time.Time, error) { if td.PublicScheduled != nil { - return *td.PublicScheduled + return td.PublicScheduled.ToTime() } - return *td.WorkingScheduled + return td.WorkingScheduled.ToTime() + } + timetableDepartureTime, err := usingTime(sd.Locations[0].DepartureTiming) + if err != nil { + return nil, fmt.Errorf("parsing departure time: %w", err) } - timetableDepartureTime := usingTime(sd.Locations[0].DepartureTiming) var lastHadActual bool for n, l := range sd.Locations { var usingData *webapi.TimingData @@ -124,7 +127,10 @@ func generateLiveSplitScriptData(sd *webapi.ServiceData) (*templateVars, error) case l.ArrivalTiming != nil: usingData = l.ArrivalTiming } - usingTimetableTime := usingTime(usingData) + usingTimetableTime, err := usingTime(usingData) + if err != nil { + return nil, fmt.Errorf("parsing time for %q: %w", l.Location.Name, err) + } var secondsOnTimetable, secondsActual int secondsOnTimetable = int((usingTimetableTime.Sub(timetableDepartureTime)) / time.Second) @@ -135,7 +141,11 @@ func generateLiveSplitScriptData(sd *webapi.ServiceData) (*templateVars, error) lastHadActual = false } if usingData.Actual != nil { - secondsActual = int((usingData.Actual.Sub(timetableDepartureTime)) / time.Second) + timeActual, err := usingData.Actual.ToTime() + if err != nil { + return nil, fmt.Errorf("parsing actual time for %q: %w", l.Location.Name, err) + } + secondsActual = int((timeActual.Sub(timetableDepartureTime)) / time.Second) lastHadActual = true } @@ -159,8 +169,8 @@ this["state"].CurrentSplitIndex = %d; return &templateVars{ Service: sd, - FirstLocation: &sd.Locations[0], - LastLocation: &sd.Locations[len(sd.Locations)-1], + FirstLocation: sd.Locations[0], + LastLocation: sd.Locations[len(sd.Locations)-1], AddSplitFunctions: asf.String(), }, nil }