diff options
8 files changed, 77 insertions, 23 deletions
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 3c0076a..ceaad5e 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -4,6 +4,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.utils.CancellableHandler; public abstract class AbstractConnector implements IConnector { @@ -53,6 +54,10 @@ public abstract class AbstractConnector implements IConnector { return null; } + public SearchResult searchByViewport(Viewport viewport, String tokens[]) { + return null; + } + protected static boolean isNumericId(final String string) { try { return Integer.parseInt(string) > 0; @@ -72,4 +77,9 @@ public abstract class AbstractConnector implements IConnector { // let every cache have reliable coordinates by default return true; } + + @Override + public String[] getTokens() { + return null; + } } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 39e6dee..471d43b 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -1,8 +1,11 @@ package cgeo.geocaching.connector; import cgeo.geocaching.ICache; +import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.opencaching.ApiOpenCachingConnector; import cgeo.geocaching.connector.opencaching.OpenCachingConnector; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Viewport; import org.apache.commons.lang3.StringUtils; @@ -62,4 +65,19 @@ public final class ConnectorFactory { private static boolean isInvalidGeocode(final String geocode) { return StringUtils.isBlank(geocode) || !Character.isLetterOrDigit(geocode.charAt(0)); } + + /** @see IConnector#searchByCoordinate */ + public static SearchResult searchByCoordinate(final Geopoint center) { + // We have only connector capable of doing a 'searchByCoordinate()' + // If there is a second connector the information has to be collected from all collectors + return GCConnector.getInstance().searchByCoordinate(center); + } + + /** @see IConnector#searchByViewport */ + public static SearchResult searchByViewport(final Viewport viewport, final String[] tokens) { + // We have only connector capable of doing a 'searchByViewport()' + // If there is a second connector the information has to be collected from all collectors + return GCConnector.getInstance().searchByViewport(viewport, tokens); + } + } diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java index 2d6e67b..6b44f82 100644 --- a/main/src/cgeo/geocaching/connector/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/GCConnector.java @@ -7,7 +7,10 @@ import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.connector.gc.GCBase; import cgeo.geocaching.enumerations.StatusCode; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.CancellableHandler; @@ -133,6 +136,17 @@ public class GCConnector extends AbstractConnector { } @Override + public SearchResult searchByCoordinate(Geopoint center) { + // TODO Auto-generated method stub + return super.searchByCoordinate(center); + } + + @Override + public SearchResult searchByViewport(Viewport viewport, String[] tokens) { + return GCBase.searchByViewport(viewport, tokens); + } + + @Override public boolean isZippedGPXFile(final String fileName) { return gpxZipFilePattern.matcher(fileName).matches(); } @@ -141,4 +155,9 @@ public class GCConnector extends AbstractConnector { public boolean isReliableLatLon(boolean cacheHasReliableLatLon) { return cacheHasReliableLatLon; } + + @Override + public String[] getTokens() { + return GCBase.getTokens(); + } } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 21cdb75..bc772c9 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -4,6 +4,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.utils.CancellableHandler; public interface IConnector { @@ -86,6 +87,15 @@ public interface IConnector { public SearchResult searchByCoordinate(final Geopoint center); /** + * Search caches by viewport. + * + * @param viewport + * @param tokens + * @return + */ + public SearchResult searchByViewport(final Viewport viewport, final String[] tokens); + + /** * return true if this is a ZIP file containing a GPX file * * @param fileName @@ -101,4 +111,12 @@ public interface IConnector { * @return */ public boolean isReliableLatLon(boolean cacheHasReliableLatLon); + + /** + * Return required tokens for specific following actions + * + * @return + */ + public String[] getTokens(); + } diff --git a/main/src/cgeo/geocaching/connector/gc/GCBase.java b/main/src/cgeo/geocaching/connector/gc/GCBase.java index 72f5d55..03ddb3c 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCBase.java +++ b/main/src/cgeo/geocaching/connector/gc/GCBase.java @@ -41,7 +41,6 @@ public class GCBase { private static final LeastRecentlyUsedCache<String, cgCache> liveMapCache = new LeastRecentlyUsedCache<String, cgCache>(2000); // JSON id, cache - // TODO Valentine move to connector before merge /** * @param viewport * @param zoomlevel @@ -340,21 +339,6 @@ public class GCBase { return GCBase.gcidToGCCode(gcid); } - // TODO Valentine - /** Request further details in the live mapa for a given id */ - public void requestDetailsFromMap(@SuppressWarnings("unused") String id) { - /** - * URL http://www.geocaching.com/map/map.details?i=gEaR - * Response: {"status":"success","data":[{"name":"Spiel & Sport","gc":"GC211WG","g": - * "872d7eda-7cb9-40d5-890d-5b344bce7302" - * ,"disabled":false,"subrOnly":false,"li":false,"fp":"0","difficulty":{"text" - * :3.0,"value":"3"},"terrain":{"text" - * :2.0,"value":"2"},"hidden":"11/15/2009","container":{"text":"Regular","value" - * :"regular.gif"},"type":{"text":"Multi-cache" - * ,"value":3},"owner":{"text":"kai2707","value":"5c4b0915-5cec-4fa1-8afd-4b3ca67e004e"}}]} - */ - } - /** Get user session & session token from the Live Map. Needed for following requests */ public static String[] getTokens() { final HttpResponse response = cgBase.request(GCConstants.URL_LIVE_MAP, null, false); diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 5ff26e0..004118f 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -15,6 +15,7 @@ import cgeo.geocaching.cgWaypoint; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.cgeocaches; import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.gc.GCBase; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; @@ -1266,8 +1267,10 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } if (tokens == null) { - // token = cgBase.getMapUserToken(noMapTokenHandler); tokens = GCBase.getTokens(); + if (noMapTokenHandler != null && tokens == null) { + noMapTokenHandler.sendEmptyMessage(0); + } } if (stop) { @@ -1276,7 +1279,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto final Viewport viewport = new Viewport(new Geopoint(latMin, lonMin), new Geopoint(latMax, lonMax)); // search = cgBase.searchByViewport(token, viewport); - search = GCBase.searchByViewport(viewport, tokens); + search = ConnectorFactory.searchByViewport(viewport, tokens); if (search != null) { downloaded = true; if (search.error == StatusCode.NOT_LOGGED_IN) { diff --git a/tests/src/cgeo/geocaching/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/cgeoApplicationTest.java index 0ea282f..36d95ae 100644 --- a/tests/src/cgeo/geocaching/cgeoApplicationTest.java +++ b/tests/src/cgeo/geocaching/cgeoApplicationTest.java @@ -1,5 +1,6 @@ package cgeo.geocaching; +import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.gc.GCBase; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; @@ -202,7 +203,7 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> { final String tokens[] = GCBase.getTokens(); final Viewport viewport = new Viewport(cache.getCoords(), 0.003, 0.003); - final SearchResult search = GCBase.searchByViewport(viewport, tokens); + final SearchResult search = ConnectorFactory.searchByViewport(viewport, tokens); // GC2JVEH is a premium members only cache. It can't be "found" by non-premium members if (Settings.isPremiumMember()) { @@ -240,7 +241,7 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> { deleteCacheFromDBAndLogout(cache.getGeocode()); Viewport viewport = new Viewport(cache.getCoords(), 0.003, 0.003); - SearchResult search = GCBase.searchByViewport(viewport, tokens); + SearchResult search = ConnectorFactory.searchByViewport(viewport, tokens); assertNotNull(search); assertTrue(search.getGeocodes().contains(cache.getGeocode())); @@ -255,7 +256,7 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> { deleteCacheFromDBAndLogout(cache.getGeocode()); viewport = new Viewport(cache.getCoords(), 0.003, 0.003); - search = GCBase.searchByViewport(viewport, tokens); + search = ConnectorFactory.searchByViewport(viewport, tokens); assertNotNull(search); // It's a premium member cache only and thus not visible to guests diff --git a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java index 4271dd4..e86dc06 100644 --- a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java @@ -2,6 +2,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgBase; +import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; @@ -17,7 +18,7 @@ public class GCConnectorTest extends AndroidTestCase { { final Viewport viewport = new Viewport(new Geopoint("N 52° 25.369 E 9° 35.499"), new Geopoint("N 52° 25.371 E 9° 35.501")); - SearchResult searchResult = GCBase.searchByViewport(viewport, tokens); + SearchResult searchResult = ConnectorFactory.searchByViewport(viewport, tokens); assertTrue(searchResult != null); assertTrue(searchResult.getCount() > 130); assertTrue(searchResult.getGeocodes().contains("GC211WG")); @@ -26,7 +27,7 @@ public class GCConnectorTest extends AndroidTestCase { { final Viewport viewport = new Viewport(new Geopoint("N 52° 24.000 E 9° 34.500"), new Geopoint("N 52° 26.000 E 9° 38.500")); - SearchResult searchResult = GCBase.searchByViewport(viewport, tokens); + SearchResult searchResult = ConnectorFactory.searchByViewport(viewport, tokens); assertTrue(searchResult != null); assertTrue(searchResult.getGeocodes().contains("GC211WG")); } |
