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
}
}