diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-10-02 09:19:50 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-10-02 09:19:50 +0200 |
| commit | fa619131bfd3d5cf5286b958ff88c6a225989ec9 (patch) | |
| tree | e3dc14cb8e7dff4f9a069f7d05574cf41fe48dff /main/src | |
| parent | b0ab27642365da03495e8268019bf1ee7273e484 (diff) | |
| download | cgeo-fa619131bfd3d5cf5286b958ff88c6a225989ec9.zip cgeo-fa619131bfd3d5cf5286b958ff88c6a225989ec9.tar.gz cgeo-fa619131bfd3d5cf5286b958ff88c6a225989ec9.tar.bz2 | |
new: search by name for opencaching
Diffstat (limited to 'main/src')
8 files changed, 86 insertions, 14 deletions
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 54e3447..3fdc11b 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -6,6 +6,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.Trackable; import cgeo.geocaching.connector.capability.ILogin; import cgeo.geocaching.connector.capability.ISearchByCenter; +import cgeo.geocaching.connector.capability.ISearchByKeyword; import cgeo.geocaching.connector.capability.ISearchByViewPort; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.oc.OCApiConnector; @@ -60,6 +61,8 @@ public final class ConnectorFactory { private static final ISearchByCenter[] searchByCenterConns; + private static final ISearchByKeyword[] searchByKeywordConns; + static { final List<ISearchByViewPort> vpConns = new ArrayList<ISearchByViewPort>(); for (final IConnector conn : CONNECTORS) { @@ -77,6 +80,15 @@ public final class ConnectorFactory { } } searchByCenterConns = centerConns.toArray(new ISearchByCenter[centerConns.size()]); + + final List<ISearchByKeyword> keywordConns = new ArrayList<ISearchByKeyword>(); + for (final IConnector conn : CONNECTORS) { + // GCConnector is handled specially, omit it here! + if (conn instanceof ISearchByKeyword && !(conn instanceof GCConnector)) { + keywordConns.add((ISearchByKeyword) conn); + } + } + searchByKeywordConns = keywordConns.toArray(new ISearchByKeyword[keywordConns.size()]); } public static IConnector[] getConnectors() { @@ -87,6 +99,10 @@ public final class ConnectorFactory { return searchByCenterConns; } + public static ISearchByKeyword[] getSearchByKeywordConnectors() { + return searchByKeywordConns; + } + public static ILogin[] getActiveLiveConnectors() { final List<ILogin> liveConns = new ArrayList<ILogin>(); for (final IConnector conn : CONNECTORS) { diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java b/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java index 3fdd61f..91dd094 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java @@ -1,14 +1,13 @@ package cgeo.geocaching.connector.capability; import cgeo.geocaching.SearchResult; +import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.geopoint.Geopoint; /** * connector capability for online searching caches around a center coordinate, sorted by distance * */ -public interface ISearchByCenter { +public interface ISearchByCenter extends IConnector { public SearchResult searchByCenter(final Geopoint center); - - public boolean isActivated(); } diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java b/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java index c3d6bba..4c16049 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java @@ -1,12 +1,13 @@ package cgeo.geocaching.connector.capability; import cgeo.geocaching.SearchResult; +import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.utils.CancellableHandler; /** * connector capability of searching online for a cache by geocode - * + * */ -public interface ISearchByGeocode { +public interface ISearchByGeocode extends IConnector { public SearchResult searchByGeocode(final String geocode, final String guid, final CancellableHandler handler); } diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java b/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java new file mode 100644 index 0000000..09b2423 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java @@ -0,0 +1,12 @@ +package cgeo.geocaching.connector.capability; + +import cgeo.geocaching.SearchResult; +import cgeo.geocaching.connector.IConnector; + +/** + * connector capability of searching online for a cache by name + * + */ +public interface ISearchByKeyword extends IConnector { + public SearchResult searchByName(final String name); +} diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java b/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java index f1bd2ce..4954017 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java @@ -1,10 +1,9 @@ package cgeo.geocaching.connector.capability; import cgeo.geocaching.SearchResult; +import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.geopoint.Viewport; -public interface ISearchByViewPort { +public interface ISearchByViewPort extends IConnector { public SearchResult searchByViewport(final Viewport viewport, final String[] tokens); - - public boolean isActivated(); } diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java index 8f38641..b1b9088 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java @@ -8,6 +8,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.ILoggingManager; import cgeo.geocaching.connector.capability.ILogin; import cgeo.geocaching.connector.capability.ISearchByCenter; +import cgeo.geocaching.connector.capability.ISearchByKeyword; import cgeo.geocaching.connector.capability.ISearchByViewPort; import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus; import cgeo.geocaching.geopoint.Geopoint; @@ -20,7 +21,7 @@ import org.apache.commons.lang3.StringUtils; import android.content.Context; import android.os.Handler; -public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin { +public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin, ISearchByKeyword { private final String cS; private final int isActivePrefKeyId; @@ -152,4 +153,10 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente public boolean isLoggedIn() { return userInfo.getStatus() == UserInfoStatus.SUCCESSFUL; } + + @Override + public SearchResult searchByName(final String name) { + final Geopoint currentPos = CgeoApplication.getInstance().currentGeo().getCoords(); + return new SearchResult(OkapiClient.getCachesNamed(currentPos, name, this)); + } } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java index c6a46c8..e3d2497 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java @@ -115,8 +115,9 @@ final class OkapiClient { private static final String SERVICE_CACHE_ADDITIONAL_CURRENT_FIELDS = "gc_code|attribution_note"; private static final String SERVICE_CACHE_ADDITIONAL_L3_FIELDS = "is_watched|my_notes"; - private static final String METHOD_SEARCH_NEAREST = "services/caches/search/nearest"; + private static final String METHOD_SEARCH_ALL = "services/caches/search/all"; private static final String METHOD_SEARCH_BBOX = "services/caches/search/bbox"; + private static final String METHOD_SEARCH_NEAREST = "services/caches/search/nearest"; private static final String METHOD_RETRIEVE_CACHES = "services/caches/geocaches"; public static Geocache getCache(final String geoCode) { @@ -146,8 +147,30 @@ final class OkapiClient { final Map<String, String> valueMap = new LinkedHashMap<String, String>(); valueMap.put("center", centerString); valueMap.put("limit", "20"); - valueMap.put("radius", "200"); + // valueMap.put("radius", "200"); + valueMap.put("name", "Rund um die Berolina*"); + + return requestCaches(connector, params, valueMap); + } + + public static List<Geocache> getCachesNamed(final Geopoint center, final String namePart, final OCApiConnector connector) { + final Map<String, String> valueMap = new LinkedHashMap<String, String>(); + final Parameters params; + + // search around current position, if there is a position + if (center != null) { + final String centerString = GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, center) + SEPARATOR + GeopointFormatter.format(GeopointFormatter.Format.LON_DECDEGREE_RAW, center); + params = new Parameters("search_method", METHOD_SEARCH_NEAREST); + valueMap.put("center", centerString); + valueMap.put("limit", "20"); + } + else { + params = new Parameters("search_method", METHOD_SEARCH_ALL); + valueMap.put("limit", "20"); + } + // full wildcard search, maybe we need to change this after some testing and evaluation + valueMap.put("name", "*" + namePart + "*"); return requestCaches(connector, params, valueMap); } @@ -165,7 +188,9 @@ final class OkapiClient { return parseCaches(data); } - // Assumes level 3 OAuth + /** + * Assumes level 3 OAuth. + */ public static List<Geocache> getCachesBBox(final Viewport viewport, final OCApiConnector connector) { if (viewport.getLatitudeSpan() == 0 || viewport.getLongitudeSpan() == 0) { diff --git a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java index adfc423..c8132e7 100644 --- a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java @@ -1,8 +1,10 @@ package cgeo.geocaching.loaders; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; +import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.capability.ISearchByKeyword; import cgeo.geocaching.connector.gc.GCParser; +import cgeo.geocaching.settings.Settings; import android.content.Context; @@ -17,7 +19,18 @@ public class KeywordGeocacheListLoader extends AbstractSearchLoader { @Override public SearchResult runSearch() { - return GCParser.searchByKeyword(keyword, Settings.getCacheType(), Settings.isShowCaptcha(), this); + SearchResult searchResult = new SearchResult(); + if (Settings.isGCConnectorActive()) { + searchResult = GCParser.searchByKeyword(keyword, Settings.getCacheType(), Settings.isShowCaptcha(), this); + } + + for (ISearchByKeyword connector : ConnectorFactory.getSearchByKeywordConnectors()) { + if (connector.isActivated()) { + searchResult.addSearchResult(connector.searchByName(keyword)); + } + } + + return searchResult; } } |
