diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2011-09-20 21:51:07 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2011-09-20 21:51:07 +0200 |
| commit | b3da6401d9b51c9526c821b0e0907c63f4fddc67 (patch) | |
| tree | b216bc06fdb53a789470973649487115e55ff7b2 /main/src/cgeo/geocaching/connector/GCConnector.java | |
| parent | 383e20e40cb6c22d9fc124386abf3d9f83972a66 (diff) | |
| download | cgeo-b3da6401d9b51c9526c821b0e0907c63f4fddc67.zip cgeo-b3da6401d9b51c9526c821b0e0907c63f4fddc67.tar.gz cgeo-b3da6401d9b51c9526c821b0e0907c63f4fddc67.tar.bz2 | |
initial support of OpenCaching.DE/.PL/.US
* search for geocode can fetch online from those sites (but no other
search method!) when testing, search for codes like OU0001, OP0001,
OC0001.
* show CC license for those caches
* disable user actions, disable caches around for non GC caches
open issues:
* other search methods not yet implemented (but available in API)
* CC license and mentioning of the OpenCaching network in about dialog
Diffstat (limited to 'main/src/cgeo/geocaching/connector/GCConnector.java')
| -rw-r--r-- | main/src/cgeo/geocaching/connector/GCConnector.java | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java index c7db821..2eea539 100644 --- a/main/src/cgeo/geocaching/connector/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/GCConnector.java @@ -1,14 +1,27 @@ package cgeo.geocaching.connector; +import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgCacheWrap; +import cgeo.geocaching.cgSearch; +import cgeo.geocaching.cgSettings; +import cgeo.geocaching.cgeoapplication; import org.apache.commons.lang3.StringUtils; +import android.util.Log; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + public class GCConnector extends AbstractConnector implements IConnector { @Override public boolean canHandle(String geocode) { - return StringUtils.isNotBlank(geocode) && geocode.toUpperCase().startsWith("GC"); + return StringUtils.isNotBlank(geocode) && StringUtils.startsWithIgnoreCase(geocode, "GC"); } @Override @@ -30,4 +43,89 @@ public class GCConnector extends AbstractConnector implements IConnector { public boolean supportsLogging() { return true; } + + @Override + public String getName() { + return "GeoCaching.com"; + } + + @Override + public String getHost() { + return "www.geocaching.com"; + } + + @Override + public boolean supportsUserActions() { + return true; + } + + @Override + public boolean supportsCachesAround() { + return true; + } + + @Override + public UUID searchByGeocode(final cgBase base, String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason) { + final String host = "www.geocaching.com"; + final String path = "/seek/cache_details.aspx"; + final String method = "GET"; + final Map<String, String> params = new HashMap<String, String>(); + if (StringUtils.isNotBlank(geocode)) { + params.put("wp", geocode); + } else if (StringUtils.isNotBlank(guid)) { + params.put("guid", guid); + } + params.put("decrypt", "y"); + + String page = base.requestLogged(false, host, path, method, params, false, false, false); + + if (StringUtils.isEmpty(page)) { + if (app.isThere(geocode, guid, true, false)) { + if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(guid)) { + Log.i(cgSettings.tag, "Loading old cache from cache."); + + geocode = app.getGeocode(guid); + } + + final List<cgCache> cacheList = new ArrayList<cgCache>(); + cacheList.add(app.getCacheByGeocode(geocode)); + search.addGeocode(geocode); + search.error = null; + + app.addSearch(search, cacheList, false, reason); + + cacheList.clear(); + + return search.getCurrentId(); + } + + Log.e(cgSettings.tag, "cgeoBase.searchByGeocode: No data from server"); + return null; + } + + final cgCacheWrap caches = base.parseCache(page, reason); + if (caches == null || caches.cacheList == null || caches.cacheList.isEmpty()) { + if (caches != null && StringUtils.isNotBlank(caches.error)) { + search.error = caches.error; + } + if (caches != null && StringUtils.isNotBlank(caches.url)) { + search.url = caches.url; + } + + app.addSearch(search, null, true, reason); + + Log.e(cgSettings.tag, "cgeoBase.searchByGeocode: No cache parsed"); + return null; + } + + if (app == null) { + Log.e(cgSettings.tag, "cgeoBase.searchByGeocode: No application found"); + return null; + } + + List<cgCache> cacheList = base.processSearchResults(search, caches, 0, 0, null); + app.addSearch(search, cacheList, true, reason); + + return search.getCurrentId(); + } } |
