aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-10-02 09:19:50 +0200
committerBananeweizen <bananeweizen@gmx.de>2013-10-02 09:19:50 +0200
commitfa619131bfd3d5cf5286b958ff88c6a225989ec9 (patch)
treee3dc14cb8e7dff4f9a069f7d05574cf41fe48dff /main/src
parentb0ab27642365da03495e8268019bf1ee7273e484 (diff)
downloadcgeo-fa619131bfd3d5cf5286b958ff88c6a225989ec9.zip
cgeo-fa619131bfd3d5cf5286b958ff88c6a225989ec9.tar.gz
cgeo-fa619131bfd3d5cf5286b958ff88c6a225989ec9.tar.bz2
new: search by name for opencaching
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java16
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java5
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java5
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java12
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java5
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java9
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java31
-rw-r--r--main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java17
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;
}
}