aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java15
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java41
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiService.java3
3 files changed, 56 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index b45f809..0b7493c 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -8,7 +8,9 @@ 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.ISearchByFinder;
import cgeo.geocaching.connector.capability.ISearchByKeyword;
+import cgeo.geocaching.connector.capability.ISearchByOwner;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.connector.gc.MapTokens;
import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus;
@@ -24,7 +26,7 @@ import org.eclipse.jdt.annotation.NonNull;
import android.content.Context;
import android.os.Handler;
-public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin, ISearchByKeyword {
+public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin, ISearchByKeyword, ISearchByOwner, ISearchByFinder {
private final String cS;
private final int isActivePrefKeyId;
@@ -53,11 +55,20 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
@Override
public SearchResult searchByCenter(@NonNull Geopoint center, final @NonNull RecaptchaReceiver recaptchaReceiver) {
-
return new SearchResult(OkapiClient.getCachesAround(center, this));
}
@Override
+ public SearchResult searchByOwner(@NonNull String username, final @NonNull RecaptchaReceiver recaptchaReceiver) {
+ return new SearchResult(OkapiClient.getCachesByOwner(username, this));
+ }
+
+ @Override
+ public SearchResult searchByFinder(@NonNull String username, final @NonNull RecaptchaReceiver recaptchaReceiver) {
+ return new SearchResult(OkapiClient.getCachesByFinder(username, this));
+ }
+
+ @Override
public OAuthLevel getSupportedAuthLevel() {
if (Settings.hasOCAuthorization(tokenPublicPrefKeyId, tokenSecretPrefKeyId)) {
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index c33891b..62e9bfc 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -104,6 +104,7 @@ final class OkapiClient {
private static final String LOG_DATE = "date";
private static final String LOG_USER = "user";
+ private static final String USER_UUID = "uuid";
private static final String USER_USERNAME = "username";
private static final String USER_CACHES_FOUND = "caches_found";
private static final String USER_INFO_FIELDS = "username|caches_found";
@@ -150,6 +151,24 @@ final class OkapiClient {
return requestCaches(connector, params, valueMap);
}
+ public static List<Geocache> getCachesByOwner(final String username, final OCApiConnector connector) {
+ final Parameters params = new Parameters("search_method", METHOD_SEARCH_ALL);
+ final Map<String, String> valueMap = new LinkedHashMap<String, String>();
+ final String uuid = getUserUUID(connector, username);
+ valueMap.put("owner_uuid", uuid);
+
+ return requestCaches(connector, params, valueMap);
+ }
+
+ public static List<Geocache> getCachesByFinder(final String username, final OCApiConnector connector) {
+ final Parameters params = new Parameters("search_method", METHOD_SEARCH_ALL);
+ final Map<String, String> valueMap = new LinkedHashMap<String, String>();
+ final String uuid = getUserUUID(connector, username);
+ valueMap.put("found_by", uuid);
+
+ 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;
@@ -698,6 +717,28 @@ final class OkapiClient {
}
}
+ public static String getUserUUID(final OCApiConnector connector, final String userName) {
+ final Parameters params = new Parameters("fields", USER_UUID, USER_USERNAME, userName);
+
+ final JSONResult result = request(connector, OkapiService.SERVICE_USER_BY_USERNAME, params);
+ if (!result.isSuccess) {
+ final OkapiError error = new OkapiError(result.data);
+ Log.e("OkapiClient.getUserUUID: error getting user info: '" + error.getMessage() + "'");
+ return null;
+ }
+
+ JSONObject data = result.data;
+ if (!data.isNull(USER_UUID)) {
+ try {
+ return data.getString(USER_UUID);
+ } catch (final JSONException e) {
+ Log.e("OkapiClient.getUserUUID - uuid", e);
+ }
+ }
+
+ return null;
+ }
+
public static UserInfo getUserInfo(final OCApiLiveConnector connector) {
final Parameters params = new Parameters("fields", USER_INFO_FIELDS);
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiService.java b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
index ec09527..3a469b6 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiService.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
@@ -8,7 +8,8 @@ enum OkapiService {
SERVICE_SEARCH_AND_RETRIEVE("/okapi/services/caches/shortcuts/search_and_retrieve", OAuthLevel.Level1),
SERVICE_MARK_CACHE("/okapi/services/caches/mark", OAuthLevel.Level3),
SERVICE_SUBMIT_LOG("/okapi/services/logs/submit", OAuthLevel.Level3),
- SERVICE_USER("/okapi/services/users/user", OAuthLevel.Level1);
+ SERVICE_USER("/okapi/services/users/user", OAuthLevel.Level1),
+ SERVICE_USER_BY_USERNAME("/okapi/services/users/by_username", OAuthLevel.Level1);
final String methodName;
final OAuthLevel level;