diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-01-04 18:36:05 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-01-04 18:36:14 +0100 |
| commit | c5842bbfc4a90bf70284a8ab292b0a44a74b1f25 (patch) | |
| tree | a3a2573780bfafa872cd2069e6bf3e54054df850 | |
| parent | 17cfe9b87399ba150bab0e4811153e982f368467 (diff) | |
| download | cgeo-c5842bbfc4a90bf70284a8ab292b0a44a74b1f25.zip cgeo-c5842bbfc4a90bf70284a8ab292b0a44a74b1f25.tar.gz cgeo-c5842bbfc4a90bf70284a8ab292b0a44a74b1f25.tar.bz2 | |
new: search by user/owner for opencaching
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; |
