diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 01020b85..1e74ba22 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -450,6 +450,7 @@ public final class BahnProvider implements NetworkProvider + ">>\n\\s*(.+?)\\s*\n
\n" // destination + "(\\d{1,2}:\\d{2})" // time + "(?: (?:(pünktl\\.)|ca. \\+(\\d+)))?" // ontime, delay + + "(?:, ([^<]*))?" // (message) + "(?:(?:, )?(Gl\\. " + ParserUtils.P_PLATFORM + "))?" // position , Pattern.DOTALL); private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)"); @@ -508,10 +509,12 @@ public final class BahnProvider implements NetworkProvider predictedTime = parsed.getTime(); } - final String position = ParserUtils.resolveEntities(mDepFine.group(6)); + final String message = ParserUtils.resolveEntities(mDepFine.group(6)); + + final String position = ParserUtils.resolveEntities(mDepFine.group(7)); final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null, - position, 0, destination); + position, 0, destination, message); if (!departures.contains(dep)) departures.add(dep); } diff --git a/src/de/schildbach/pte/Departure.java b/src/de/schildbach/pte/Departure.java index 2f3a1a95..5281c0d6 100644 --- a/src/de/schildbach/pte/Departure.java +++ b/src/de/schildbach/pte/Departure.java @@ -31,9 +31,10 @@ public final class Departure final public String position; final public int destinationId; final public String destination; + final public String message; public Departure(final Date plannedTime, final Date predictedTime, final String line, final int[] lineColors, final String position, - final int destinationId, final String destination) + final int destinationId, final String destination, final String message) { this.plannedTime = plannedTime; this.predictedTime = predictedTime; @@ -42,6 +43,7 @@ public final class Departure this.position = position; this.destinationId = destinationId; this.destination = destination; + this.message = message; } public Departure(final Date plannedTime, final String line, final int[] lineColors, final String position, final int destinationId, @@ -54,6 +56,7 @@ public final class Departure this.position = position; this.destinationId = destinationId; this.destination = destination; + this.message = null; } @Override diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index 586d9023..d7f74539 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -481,7 +481,7 @@ public class OebbProvider implements NetworkProvider final String position = mDepFine.group(7) != null ? "Gl. " + ParserUtils.resolveEntities(mDepFine.group(7)) : null; final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null, - position, destinationId, destination); + position, destinationId, destination, null); if (!departures.contains(dep)) departures.add(dep); diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index 6f1447e6..98a3627d 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -522,7 +522,7 @@ public class RmvProvider implements NetworkProvider final String position = ParserUtils.resolveEntities(mDepFine.group(5)); final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line.charAt(0)) : null, - position, 0, destination); + position, 0, destination, null); if (!departures.contains(dep)) departures.add(dep); diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index 517c3ab8..5c731105 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -601,7 +601,7 @@ public final class VbbProvider implements NetworkProvider final String destination = ParserUtils.resolveEntities(mDepFine.group(live ? 4 : 5)); final Departure dep = new Departure(plannedTime, predictedTime, line, line != null ? LINES.get(line) : null, position, - destinationId, destination); + destinationId, destination, null); if (!departures.contains(dep)) departures.add(dep); } diff --git a/test/de/schildbach/pte/BahnProviderTest.java b/test/de/schildbach/pte/BahnProviderTest.java index 947db444..d49e915a 100644 --- a/test/de/schildbach/pte/BahnProviderTest.java +++ b/test/de/schildbach/pte/BahnProviderTest.java @@ -17,6 +17,7 @@ package de.schildbach.pte; +import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import java.util.regex.Matcher; @@ -31,7 +32,8 @@ public class BahnProviderTest @Test public void connectionUebergang() { - assertFineConnectionDetails("Berlin Hbf
\n" // + assertFineConnectionDetails("" // + + "Berlin Hbf
\n" // + "Übergang\n" // + "
\n" // + "Berlin-Lichtenberg
"); @@ -40,7 +42,8 @@ public class BahnProviderTest @Test public void departureWithPlatform() { - assertFineDepartures("\n" // + assertFineDepartures("" // + + "\n" // + "S 1\n" // + "\n" // + ">>\n" // @@ -52,7 +55,8 @@ public class BahnProviderTest @Test public void departureWithOnTime() { - assertFineDepartures("\n" // + assertFineDepartures("" // + + "\n" // + "RE 38148\n" // + "\n" // + ">>\n" // @@ -61,10 +65,24 @@ public class BahnProviderTest + "21:58 pünktl., Gl. 13"); } + @Test + public void departureWithMessage() + { + assertFineDepartures("" // + + "\n" // + + "ICE 824\n" // + + "\n" // + + ">>\n" // + + "Dortmund Hbf\n" // + + "
\n" // + + "07:02 ca. +5, Fährt heute nur bis Düsseldorf Hbf, Gl. 10"); + } + private void assertFineConnectionDetails(String s) { Matcher m = BahnProvider.P_CONNECTION_DETAILS_FINE.matcher(s); assertTrue(m.matches()); + // ParserUtils.printGroups(m); } @@ -72,6 +90,12 @@ public class BahnProviderTest { Matcher m = BahnProvider.P_DEPARTURES_FINE.matcher(s); assertTrue(m.matches()); - // ParserUtils.printGroups(m); + + ParserUtils.printGroups(m); + + assertNotNull(m.group(1)); // line + assertNotNull(m.group(2)); // destination + assertNotNull(m.group(3)); // time + assertNotNull(m.group(6)); // departure } }