import ../parse/products import ../parse/point import ../parse/accessibility import ../parse/journeys_response import ../types import ../util import json import times import asyncdispatch import options proc journeys*(params: JourneysParams): Future[JourneysResponse] {.async.} = var `when` = now().toTime() var isDeparture = true if params.departure.isSome: `when` = params.departure.get.fromUnix elif params.arrival.isSome: `when` = params.arrival.get.fromUnix isDeparture = false let req = %* { "cfg": { "polyEnc": "GPA" }, "meth": "TripSearch", "req": { "ctxScr": nil, "getPasslist": params.stopovers.get(false), "maxChg": params.transfers.get(-1), "minChgTime": params.transferTime.get(0), "numF": params.results.get(5), "depLocL": [ params.fromPoint.formatPoint() ], "viaLocL": [], "arrLocL": [ params.toPoint.formatPoint() ], "jnyFltrL": [ { "type": "PROD", "mode": "INC", "value": $formatProducts(params.products.get(parseProducts(1023))), }, { "type": "META", "mode": "INC", "meta": formatAccessibility(params.accessibility.get(Accessibility.none)), } ], "gisFltrL": [], "getTariff": params.tickets.get(true), "ushrp": params.startWithWalking.get(true), "getPT": true, "getIV": false, "getPolyline": params.polylines.get(false), "outFrwd": isDeparture, "outDate": `when`.format("yyyyMMdd"), "outTime": `when`.format("HHmmss"), "trfReq": { "jnyCl": 2, "tvlrProf": [ { "type": "E", "redtnCard": nil } ], "cType": "PK" } } } if params.laterRef.isSome: req["req"]["ctxScr"] = %* params.laterRef.get elif params.earlierRef.isSome: req["req"]["ctxScr"] = %* params.earlierRef.get if params.viaPoint.isSome: let viaPoint = params.viaPoint.get req["req"]["viaLocL"] = %* [{ "loc": viaPoint.formatPoint() }] let data = await request(req) return parseJourneysResponse(data)