Author: Adam <git@apiote.xyz>
remove StopOrder.TripID
traffic/access.go | 7 +++---- traffic/convert.go | 25 +++++++++++++++---------- traffic/structs_gen.go | 43 ++++++++++++++++++++++++++++++++++++++++---
diff --git a/traffic/access.go b/traffic/access.go index 7d8ad43e666814fc12d2cbadea67e40bf254711d..034ff87e56263292d2a998d73d37b7c060121b22 100644 --- a/traffic/access.go +++ b/traffic/access.go @@ -271,7 +271,6 @@ _, inToday := result.TodaySchedule[trip.ScheduleID] _, inYesterday := result.YesterdaySchedule[trip.ScheduleID] if inToday || inYesterday { trips[trip.Id] = trip - order.TripID = trip.Id orders[trip.Id] = order } } @@ -284,8 +283,8 @@ func getUpdates(input ...interface{}) (interface{}, error) { result := input[0].(_Result) departures := []DepartureRealtime{} timedOut := false - for _, order := range result.Stop.Order { - trip := result.Trips[order.TripID] + for tripID, order := range result.Stop.Order { + trip := result.Trips[tripID] var date time.Time if _, ok := result.TodaySchedule[trip.ScheduleID]; ok { @@ -335,7 +334,7 @@ departureRt.Update.Time = departureTime if departureTime.After(result.Midnight) { if result.DeparturesType == DEPARTURES_HYBRID && !timedOut { - departureRt.Update, err = getRealtimeOffset(order.TripID, + departureRt.Update, err = getRealtimeOffset(trip.Id, order.Sequence, feed) if err != nil { if isTimeout(err) { diff --git a/traffic/convert.go b/traffic/convert.go index f9dc74a1f211e05258595bdc80287de0db83d793..a2d2e55a70394e2b2aec6eb0200d104c70b23829 100644 --- a/traffic/convert.go +++ b/traffic/convert.go @@ -2,6 +2,10 @@ package traffic // todo(BAF10) direction (0|1) to const (TO|BACK) // fixme converting lines takes much time (graphs) +// todo Agency.language, FeedInfo.language -> IETF language tag +// todo Agency.phoneNumber -> E.123 format +// todo remove StopOrder.tripID +// todo validity to FeedInfo, not filename import ( "apiote.xyz/p/szczanieckiej/config" @@ -11,7 +15,6 @@ "bufio" "encoding/csv" "errors" "fmt" - //"image/color" "io" "io/fs" "log" @@ -61,7 +64,7 @@ HomeFeedPath string TrafficCalendarFile *os.File Departures map[string][]Departure - TripsThroughStop map[string][]StopOrder + TripsThroughStop map[string]map[string]StopOrder LineNames map[string]string TripsOffsets map[string]uint TripChangeOpts map[string]ChangeOption @@ -462,7 +465,7 @@ for i, headerField := range header { fields[headerField] = i } - tripsThroughStop := map[string][]StopOrder{} + tripsThroughStop := map[string]map[string]StopOrder{} tripHeadsigns := map[string]string{} for { @@ -482,10 +485,12 @@ fmt.Sscanf(record[fields["stop_sequence"]], "%d", &departure.StopSequence) fmt.Sscanf(record[fields["pickup_type"]], "%d", &departure.Pickup) fmt.Sscanf(record[fields["drop_off_type"]], "%d", &departure.Dropoff) - tripsThroughStop[stopID] = append(tripsThroughStop[stopID], StopOrder{ - TripID: tripID, + if _, ok := tripsThroughStop[stopID]; !ok { + tripsThroughStop[stopID] = map[string]StopOrder{} + } + tripsThroughStop[stopID][tripID] = StopOrder{ Sequence: departure.StopSequence, - }) + } if c.Feed.Flags().Headsign == HeadsignTripLastStop { tripHeadsigns[tripID] = stopID @@ -749,13 +754,13 @@ changeOptionMap := map[string]ChangeOption{} stop.ChangeOptions = []ChangeOption{} stop.Order = map[string]StopOrder{} - for _, stopTrip := range stopTrips { - changeOption := tripChangeOpts[stopTrip.TripID] + for tripID, stopTrip := range stopTrips { + changeOption := tripChangeOpts[tripID] stopOrder := StopOrder{ - TripOffset: tripsOffsets[stopTrip.TripID], + TripOffset: tripsOffsets[tripID], Sequence: stopTrip.Sequence, } - stop.Order[stopTrip.TripID] = stopOrder + stop.Order[tripID] = stopOrder changeOptionMap[changeOption.LineName+"->"+changeOption.Headsign] = changeOption } for _, option := range changeOptionMap { diff --git a/traffic/structs_gen.go b/traffic/structs_gen.go index fb8859898c4991e4c4fc50ce4f4cb0bb5a13738f..0f5522ba86e072f5146e242ea352b3faee51bf43 100644 --- a/traffic/structs_gen.go +++ b/traffic/structs_gen.go @@ -115,9 +115,8 @@ return bare.Marshal(t) } type StopOrder struct { - TripOffset uint `bare:"tripOffset"` - Sequence int `bare:"sequence"` - TripID string `bare:"tripID"` + TripOffset uint `bare:"tripOffset"` + Sequence int `bare:"sequence"` } func (t *StopOrder) Decode(data []byte) error { @@ -249,6 +248,44 @@ case BACK: return "BACK" } panic(errors.New("Invalid Direction value")) +} + +type VehicleCapabilities uint + +const ( + RAMP VehicleCapabilities = 1 + LOW_FLOOR VehicleCapabilities = 2 + AIR_CONDITIONING VehicleCapabilities = 4 + BICYCLE VehicleCapabilities = 8 + VOICE_ANNOUNCEMENTS VehicleCapabilities = 16 + TICKET_MACHINE VehicleCapabilities = 32 + TICKET_SOLD_DRIVER VehicleCapabilities = 64 + USB_CHARGING VehicleCapabilities = 128 + LOW_FLOOR_PARTIAL VehicleCapabilities = 256 +) + +func (t VehicleCapabilities) String() string { + switch t { + case RAMP: + return "RAMP" + case LOW_FLOOR: + return "LOW_FLOOR" + case AIR_CONDITIONING: + return "AIR_CONDITIONING" + case BICYCLE: + return "BICYCLE" + case VOICE_ANNOUNCEMENTS: + return "VOICE_ANNOUNCEMENTS" + case TICKET_MACHINE: + return "TICKET_MACHINE" + case TICKET_SOLD_DRIVER: + return "TICKET_SOLD_DRIVER" + case USB_CHARGING: + return "USB_CHARGING" + case LOW_FLOOR_PARTIAL: + return "LOW_FLOOR_PARTIAL" + } + panic(errors.New("Invalid VehicleCapabilities value")) } type Boarding uint