Files
golifehk/datasources/mtr/bus/query.go

69 lines
1.3 KiB
Go

package bus
import (
"strings"
query "github.com/tgckpg/golifehk/query"
)
func Query(lang string, message string) query.IQueryResult {
var qBusStops *query.QueryObject
var err error
qr := QueryResult{Lang: lang}
busStops, err := getBusStops()
if err != nil {
qr.Error = err
goto qrReturn
}
qBusStops, err = query.Parse(strings.ToUpper(message), busStops)
if err != nil {
qr.Error = err
goto qrReturn
}
qr.Query = qBusStops
if 0 < len(*qBusStops.Results) && 1 < len(*qBusStops.SearchTerms) {
schedules, err := getSchedule(lang, qBusStops.Key)
if err != nil {
qr.Error = err
goto qrReturn
}
if len(schedules.BusStops) == 0 {
qr.Schedules = &map[*BusStop]*BusStopBuses{}
goto qrReturn
}
matches := map[*BusStop]*BusStopBuses{}
sMatches := map[*BusStop]*BusStopBuses{}
for _, entry := range *qBusStops.Results {
busStop := any(entry).(*BusStop)
for _, busStopSch := range schedules.BusStops {
if busStopSch.BusStopId == busStop.StationId {
if busStop.RouteId != busStop.ReferenceId {
sMatches[busStop] = &busStopSch
continue
}
matches[busStop] = &busStopSch
break
}
}
}
if len(matches) == 0 && 0 < len(sMatches) {
matches = sMatches
}
qr.Schedules = &matches
}
qrReturn:
var iqr query.IQueryResult
iqr = &qr
return iqr
}