diff options
| author | mucek4 <tomaz@gorenc.org> | 2013-09-04 10:44:53 +0200 |
|---|---|---|
| committer | mucek4 <tomaz@gorenc.org> | 2013-09-04 10:44:53 +0200 |
| commit | bd09f1887a8e6a8e9b919d4605c04155a3e73760 (patch) | |
| tree | 29e65f4b81e983300f080a3509ee982576bfeb14 /main/src/cgeo/geocaching/connector | |
| parent | 8fe25127326d3b29d53cd3ef663aa6e46241fcbc (diff) | |
| download | cgeo-bd09f1887a8e6a8e9b919d4605c04155a3e73760.zip cgeo-bd09f1887a8e6a8e9b919d4605c04155a3e73760.tar.gz cgeo-bd09f1887a8e6a8e9b919d4605c04155a3e73760.tar.bz2 | |
Fix 2830 Browse PQs as nearby search
Diffstat (limited to 'main/src/cgeo/geocaching/connector')
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConstants.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCParser.java | 48 |
2 files changed, 49 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index 16aa967..84c27fe 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -158,6 +158,7 @@ public final class GCConstants { public final static Pattern PATTERN_VIEWSTATEFIELDCOUNT = Pattern.compile("id=\"__VIEWSTATEFIELDCOUNT\"[^(value)]+value=\"(\\d+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_VIEWSTATES = Pattern.compile("id=\"__VIEWSTATE(\\d*)\"[^(value)]+value=\"([^\"]+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_USERTOKEN = Pattern.compile("userToken\\s*=\\s*'([^']+)'"); + public final static Pattern PATTERN_LIST_PQ = Pattern.compile(Pattern.quote("pocket_query.png") + ".*?" + Pattern.quote("(") + "(.*?)" + Pattern.quote(")") + ".*?guid=([^\"]*)\".*?>([^<]*)<"); /** Live Map since 14.02.2012 */ public final static Pattern PATTERN_USERSESSION = Pattern.compile("UserSession\\('([^']+)'"); diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 3885679..bd20216 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -3,6 +3,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.Geocache; import cgeo.geocaching.Image; import cgeo.geocaching.LogEntry; +import cgeo.geocaching.PocketQueryList; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; import cgeo.geocaching.Trackable; @@ -906,6 +907,17 @@ public abstract class GCParser { return searchByAny(cacheType, isSearchForMyCaches(userName), showCaptcha, params, recaptchaReceiver); } + public static SearchResult searchByPocket(final String pocketGuid, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { + if (StringUtils.isBlank(pocketGuid)) { + Log.e("GCParser.searchByPocket: No guid name given"); + return null; + } + + final Parameters params = new Parameters("pq", pocketGuid); + + return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver); + } + public static SearchResult searchByOwner(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(userName)) { Log.e("GCParser.searchByOwner: No user name given"); @@ -978,6 +990,42 @@ public abstract class GCParser { return trackable; } + public static List<PocketQueryList> searchPocketQueryList() { + + final Parameters params = new Parameters(); + + final String page = Login.getRequestLogged("http://www.geocaching.com/pocket/default.aspx", params); + + if (StringUtils.isBlank(page)) { + Log.e("GCParser.searchPocketQueryList: No data from server"); + return null; + } + + String subPage = StringUtils.substringAfter(page, "class=\"PocketQueryListTable"); + if (StringUtils.isEmpty(subPage)) { + Log.e("GCParser.searchPocketQueryList: class \"PocketQueryListTable\" not found on page"); + return Collections.emptyList(); + } + + List<PocketQueryList> list = new ArrayList<PocketQueryList>(); + + final MatcherWrapper matcherPocket = new MatcherWrapper(GCConstants.PATTERN_LIST_PQ, subPage); + + while (matcherPocket.find()) { + int maxCaches; + try { + maxCaches = Integer.parseInt(matcherPocket.group(1)); + } catch (NumberFormatException e) { + maxCaches = 0; + Log.e("GCParser.searchPocketQueryList: Unable to parse max caches", e); + } + final PocketQueryList pqList = new PocketQueryList(matcherPocket.group(2), matcherPocket.group(3), maxCaches); + list.add(pqList); + } + + return list; + } + public static ImmutablePair<StatusCode, String> postLog(final String geocode, final String cacheid, final String[] viewstates, final LogType logType, final int year, final int month, final int day, final String log, final List<TrackableLog> trackables) { |
