aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-11-23 11:48:44 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-11-23 11:48:44 +0100
commitc15bc595248672431a65538e347802640051f796 (patch)
treecf997ef191af130778a7a0fb7aaf41a55a08533f /main/src
parentf03e4b447610caa556c972345081fca9f5a04795 (diff)
downloadcgeo-c15bc595248672431a65538e347802640051f796.zip
cgeo-c15bc595248672431a65538e347802640051f796.tar.gz
cgeo-c15bc595248672431a65538e347802640051f796.tar.bz2
Better diagnostic of failed parsing if layout of waypoints changes
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java33
1 files changed, 21 insertions, 12 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index e7b7f92..33447c7 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -78,8 +78,8 @@ import java.util.Set;
import java.util.regex.Pattern;
public abstract class GCParser {
- private final static SynchronizedDateFormat dateTbIn1 = new SynchronizedDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009
- private final static SynchronizedDateFormat dateTbIn2 = new SynchronizedDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009
+ private final static SynchronizedDateFormat DATE_TB_IN_1 = new SynchronizedDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009
+ private final static SynchronizedDateFormat DATE_TB_IN_2 = new SynchronizedDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009
private final static ImmutablePair<StatusCode, Geocache> UNKNOWN_PARSE_ERROR = ImmutablePair.of(StatusCode.UNKNOWN_ERROR, null);
private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha, final RecaptchaReceiver recaptchaReceiver) {
@@ -725,8 +725,13 @@ public abstract class GCParser {
final String[] wpItems = StringUtils.splitByWholeSeparator(wpList, "<tr");
- for (int j = 1; j < wpItems.length; j++) {
- String[] wp = StringUtils.splitByWholeSeparator(wpItems[j], "<td");
+ for (int j = 1; j < wpItems.length; j += 2) {
+ final String[] wp = StringUtils.splitByWholeSeparator(wpItems[j], "<td");
+ assert wp != null;
+ if (wp.length < 8) {
+ Log.e("GCParser.cacheParseFromText: not enough waypoint columns in table");
+ continue;
+ }
// waypoint name
// res is null during the unit tests
@@ -749,13 +754,17 @@ public abstract class GCParser {
waypoint.setCoords(new Geopoint(latlon));
}
- j++;
- if (wpItems.length > j) {
- wp = StringUtils.splitByWholeSeparator(wpItems[j], "<td");
- }
+ if (wpItems.length >= j) {
+ final String[] wpNote = StringUtils.splitByWholeSeparator(wpItems[j + 1], "<td");
+ assert wpNote != null;
+ if (wpNote.length < 4) {
+ Log.d("GCParser.cacheParseFromText: not enough waypoint columns in table to extract note");
+ continue;
+ }
- // waypoint note
- waypoint.setNote(TextUtils.getMatch(wp[3], GCConstants.PATTERN_WPNOTE, waypoint.getNote()));
+ // waypoint note
+ waypoint.setNote(TextUtils.getMatch(wpNote[3], GCConstants.PATTERN_WPNOTE, waypoint.getNote()));
+ }
cache.addOrChangeWaypoint(waypoint, false);
}
@@ -1535,11 +1544,11 @@ public abstract class GCParser {
final String releaseString = TextUtils.getMatch(page, GCConstants.PATTERN_TRACKABLE_RELEASES, false, null);
if (releaseString != null) {
try {
- trackable.setReleased(dateTbIn1.parse(releaseString));
+ trackable.setReleased(DATE_TB_IN_1.parse(releaseString));
} catch (final ParseException ignored) {
if (trackable.getReleased() == null) {
try {
- trackable.setReleased(dateTbIn2.parse(releaseString));
+ trackable.setReleased(DATE_TB_IN_2.parse(releaseString));
} catch (final ParseException e) {
Log.e("Could not parse trackable release " + releaseString, e);
}