db-vendo-client/parse/stopover.js
2018-07-16 11:36:27 +02:00

86 lines
2.5 KiB
JavaScript

'use strict'
const findRemark = require('./find-remark')
const createParseStopover = (profile, opt, data, date) => {
const {locations, lines, hints, warnings} = data
const parseStopover = (st) => {
const res = {
stop: locations[parseInt(st.locX)] || null,
arrival: null,
arrivalDelay: null,
arrivalPlatform: st.aPlatfR || st.aPlatfS || null,
departure: null,
departureDelay: null,
departurePlatform: st.dPlatfR || st.dPlatfS || null
}
// todo: DRY with parseDeparture
// todo: DRY with parseJourneyLeg
if (st.aTimeR || st.aTimeS) {
const arr = profile.parseDateTime(profile, date, st.aTimeR || st.aTimeS)
res.arrival = arr.toISO()
}
if (st.aTimeR && st.aTimeS) {
const realtime = profile.parseDateTime(profile, date, st.aTimeR)
const planned = profile.parseDateTime(profile, date, st.aTimeS)
res.arrivalDelay = Math.round((realtime - planned) / 1000)
}
if (st.dTimeR || st.dTimeS) {
const dep = profile.parseDateTime(profile, date, st.dTimeR || st.dTimeS)
res.departure = dep.toISO()
}
if (st.dTimeR && st.dTimeS) {
const realtime = profile.parseDateTime(profile, date, st.dTimeR)
const planned = profile.parseDateTime(profile, date, st.dTimeS)
res.departureDelay = Math.round((realtime - planned) / 1000)
}
if (st.aPlatfR && st.aPlatfS && st.aPlatfR !== st.aPlatfS) {
res.formerScheduledArrivalPlatform = st.aPlatfS
}
if (st.dPlatfR && st.dPlatfS && st.dPlatfR !== st.dPlatfS) {
res.formerScheduledDeparturePlatform = st.dPlatfS
}
// mark stations the train passes without stopping
if(st.dInS === false && st.aOutS === false) res.passBy = true
// todo: DRY with parseDeparture
// todo: DRY with parseJourneyLeg
if (st.aCncl || st.dCncl) {
res.cancelled = true
Object.defineProperty(res, 'canceled', {value: true})
if (st.aCncl) {
res.arrival = res.arrivalDelay = null
if (st.aTimeS) {
const arr = profile.parseDateTime(profile, date, st.aTimeS)
res.formerScheduledArrival = arr.toISO()
}
}
if (st.dCncl) {
res.departure = res.departureDelay = null
if (st.dTimeS) {
const arr = profile.parseDateTime(profile, date, st.dTimeS)
res.formerScheduledDeparture = arr.toISO()
}
}
}
if (opt.remarks && Array.isArray(st.msgL)) {
res.remarks = []
for (let ref of st.msgL) {
const remark = findRemark(hints, warnings, ref)
if (remark) res.remarks.push(remark)
}
}
return res
}
return parseStopover
}
module.exports = createParseStopover