From f47e3312c35627569d50b34a2282a54915c759c9 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Sun, 19 May 2013 19:15:05 +0200 Subject: fix: parse basic member difficulty and terrain Part of work on #2733. --- main/src/cgeo/geocaching/connector/gc/GCConstants.java | 1 + main/src/cgeo/geocaching/connector/gc/GCParser.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index c916071..00b773a 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -118,6 +118,7 @@ public final class GCConstants { /** Second group used */ public final static Pattern PATTERN_SEARCH_TRACKABLESINSIDE = Pattern.compile("(\"([^\"]+)\"[^<]*)"); public final static Pattern PATTERN_SEARCH_DIRECTION_DISTANCE = Pattern.compile("]*>[^<]*
([^<]+)"); + public final static Pattern PATTERN_SEARCH_DIFFICULTY_TERRAIN = Pattern.compile("([0-5]([\\.,]5)?)/([0-5]([\\.,]5)?)
"); public final static Pattern PATTERN_SEARCH_GEOCODE = Pattern.compile("\\|\\W*(GC[0-9A-Z]+)[^\\|]*\\|"); public final static Pattern PATTERN_SEARCH_ID = Pattern.compile("name=\"CID\"[^v]*value=\"([0-9]+)\""); public final static Pattern PATTERN_SEARCH_FAVORITE = Pattern.compile("([0-9]+)"); diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index b4d665b..54bd19d 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -176,6 +176,19 @@ public abstract class GCParser { } } + // difficulty/terrain + final MatcherWrapper matcherDT = new MatcherWrapper(GCConstants.PATTERN_SEARCH_DIFFICULTY_TERRAIN, row); + if (matcherDT.find()) { + final Float difficulty = parseStars(matcherDT.group(1)); + if (difficulty != null) { + cache.setDifficulty(difficulty); + } + final Float terrain = parseStars(matcherDT.group(3)); + if (terrain != null) { + cache.setTerrain(terrain); + } + } + // cache inventory final MatcherWrapper matcherTbs = new MatcherWrapper(GCConstants.PATTERN_SEARCH_TRACKABLES, row); String inventoryPre = null; @@ -306,6 +319,11 @@ public abstract class GCParser { return searchResult; } + private static Float parseStars(final String value) { + float floatValue = Float.parseFloat(StringUtils.replaceChars(value, ',', '.')); + return floatValue >= 0.5 && floatValue <= 5.0 ? floatValue : null; + } + static SearchResult parseCache(final String page, final CancellableHandler handler) { final SearchResult searchResult = parseCacheFromText(page, handler); if (searchResult != null && !searchResult.getGeocodes().isEmpty()) { -- cgit v1.1 From d5931b80d2a507ffc989484189520ea18e373c17 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Sun, 19 May 2013 19:43:08 +0200 Subject: fix: parse basic member size Part of work on #2733. --- main/src/cgeo/geocaching/connector/gc/GCConstants.java | 1 + main/src/cgeo/geocaching/connector/gc/GCParser.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index 00b773a..357f971 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -119,6 +119,7 @@ public final class GCConstants { public final static Pattern PATTERN_SEARCH_TRACKABLESINSIDE = Pattern.compile("(\"([^\"]+)\"[^<]*)"); public final static Pattern PATTERN_SEARCH_DIRECTION_DISTANCE = Pattern.compile("]*>[^<]*
([^<]+)"); public final static Pattern PATTERN_SEARCH_DIFFICULTY_TERRAIN = Pattern.compile("([0-5]([\\.,]5)?)/([0-5]([\\.,]5)?)
"); + public final static Pattern PATTERN_SEARCH_CONTAINER = Pattern.compile("([0-9]+)"); diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 54bd19d..587c904 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -189,6 +189,10 @@ public abstract class GCParser { } } + // size + final String container = BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_CONTAINER, false, 1, null, false); + cache.setSize(CacheSize.getById(container)); + // cache inventory final MatcherWrapper matcherTbs = new MatcherWrapper(GCConstants.PATTERN_SEARCH_TRACKABLES, row); String inventoryPre = null; -- cgit v1.1