81 lines
1.3 KiB
Go
81 lines
1.3 KiB
Go
package kmb
|
|
|
|
import (
|
|
query "github.com/tgckpg/golifehk/query"
|
|
"log"
|
|
"strings"
|
|
)
|
|
|
|
func Query(q query.QueryMessage) query.IQueryResult {
|
|
|
|
lang := q.Lang
|
|
|
|
var qo *query.QueryObject
|
|
var err error
|
|
var routeStops *[]query.ISearchable
|
|
|
|
qr := QueryResult{
|
|
Lang: lang,
|
|
FallbackNearest: 3,
|
|
NearestRange: 50,
|
|
}
|
|
|
|
busStops, err := readBusStopsData()
|
|
if err != nil {
|
|
qr.Error = err
|
|
goto qrReturn
|
|
}
|
|
|
|
routeStops, err = getRouteStops(busStops)
|
|
if err != nil {
|
|
qr.Error = err
|
|
goto qrReturn
|
|
}
|
|
|
|
if q.Text != "" {
|
|
qo, err = query.MatchKeys(strings.ToUpper(q.Text), routeStops)
|
|
} else if q.Location != nil {
|
|
bList := []query.ISearchable{}
|
|
|
|
for _, b := range *busStops {
|
|
bList = append(bList, b)
|
|
}
|
|
|
|
qo, err = query.MatchNearest(*q.Location, &bList, qr.NearestRange, qr.FallbackNearest)
|
|
}
|
|
|
|
qo.Message = &q
|
|
|
|
if err != nil {
|
|
qr.Error = err
|
|
goto qrReturn
|
|
}
|
|
|
|
qr.Query = qo
|
|
|
|
if 0 < len(*qo.Results) && 1 < len(*qo.SearchTerms) {
|
|
|
|
rSchedules := map[*RouteStop]*[]*Schedule{}
|
|
for _, item := range *qo.Results {
|
|
var r *RouteStop
|
|
r = any(item).(*RouteStop)
|
|
schedules, err := getSchedule(r)
|
|
if err != nil {
|
|
qr.Error = err
|
|
break
|
|
}
|
|
|
|
rSchedules[r] = schedules
|
|
}
|
|
qr.Schedules = &rSchedules
|
|
}
|
|
|
|
qrReturn:
|
|
if qr.Error != nil {
|
|
log.Println(qr.Error)
|
|
}
|
|
var iqr query.IQueryResult
|
|
iqr = &qr
|
|
return iqr
|
|
}
|