diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index e2135916..517c3ab8 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -530,9 +530,10 @@ public final class VbbProvider implements NetworkProvider + "\\s*((?:|).+?)\\s*" // , Pattern.DOTALL); private static final Pattern P_DEPARTURES_LIVE_FINE = Pattern.compile("" // - + "\\s*(.*?)[\\s\\*]*\\s*" // - + "\\s*(.*?)\\s*\\s*" // - + ".*?\\s*(.*?)\\s*.*?" // + + "\\s*(\\d{1,2}:\\d{2})\\s*" // time + + "(\\*)?\\s*\\s*" // planned + + "\\s*(.*?)\\s*\\s*" // line + + ".*?\\s*(.*?)\\s*.*?" // destination , Pattern.DOTALL); private static final Pattern P_DEPARTURES_PLAN_FINE = Pattern.compile("" // + "(\\d{1,2}:\\d{2}).*?" // time @@ -572,7 +573,6 @@ public final class VbbProvider implements NetworkProvider final Matcher mDepFine = (live ? P_DEPARTURES_LIVE_FINE : P_DEPARTURES_PLAN_FINE).matcher(mDepCoarse.group(1)); if (mDepFine.matches()) { - // time final Calendar current = new GregorianCalendar(); current.setTime(currentTime); final Calendar parsed = new GregorianCalendar(); @@ -583,20 +583,25 @@ public final class VbbProvider implements NetworkProvider if (ParserUtils.timeDiff(parsed.getTime(), currentTime) < -PARSER_DAY_ROLLOVER_THRESHOLD_MS) parsed.add(Calendar.DAY_OF_MONTH, 1); - // line - final String line = normalizeLine(ParserUtils.resolveEntities(mDepFine.group(2))); + boolean isPlanned = live && mDepFine.group(2) != null; + + Date plannedTime = null; + Date predictedTime = null; + if (live && !isPlanned) + predictedTime = parsed.getTime(); + else + plannedTime = parsed.getTime(); + + final String line = normalizeLine(ParserUtils.resolveEntities(mDepFine.group(live ? 3 : 2))); - // position final String position = !live ? ParserUtils.resolveEntities(mDepFine.group(3)) : null; - // destinationId final int destinationId = !live ? Integer.parseInt(mDepFine.group(4)) : 0; - // destination - final String destination = ParserUtils.resolveEntities(mDepFine.group(live ? 3 : 5)); + final String destination = ParserUtils.resolveEntities(mDepFine.group(live ? 4 : 5)); - final Departure dep = new Departure(parsed.getTime(), line, line != null ? LINES.get(line) : null, position, destinationId, - destination); + final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line) : null, position, + destinationId, destination); if (!departures.contains(dep)) departures.add(dep); }