diff options
Diffstat (limited to 'main/src/cgeo/geocaching/connector/oc')
4 files changed, 67 insertions, 10 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java index acf7b48..5e5151a 100644 --- a/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java +++ b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java @@ -7,7 +7,6 @@ public interface IOCAuthParams { /** * The site name: 'www.opencaching...' * - * @return */ @NonNull String getSite(); @@ -15,56 +14,48 @@ public interface IOCAuthParams { /** * ResId of the Consumer key * - * @return */ int getCKResId(); /** * ResId of the Consumer secret * - * @return */ int getCSResId(); /** * ResId of the Authorization title * - * @return */ int getAuthTitleResId(); /** * Preference key of the public token * - * @return */ int getTokenPublicPrefKey(); /** * Preference key of the secret token * - * @return */ int getTokenSecretPrefKey(); /** * Preference key of the temporary public token (OAuth) * - * @return */ int getTempTokenPublicPrefKey(); /** * Preference key of the temporary secret token (OAuth) * - * @return */ int getTempTokenSecretPrefKey(); /** * The URI to use as a callback (OAuth) * - * @return */ @NonNull String getCallbackUri(); diff --git a/main/src/cgeo/geocaching/connector/oc/OCCZConnector.java b/main/src/cgeo/geocaching/connector/oc/OCCZConnector.java new file mode 100644 index 0000000..ee4330a --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/OCCZConnector.java @@ -0,0 +1,34 @@ +package cgeo.geocaching.connector.oc; + +import cgeo.geocaching.utils.Log; + +import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + +public class OCCZConnector extends OCConnector { + + private static final String GEOCODE_PREFIX = "OZ"; + + public OCCZConnector() { + super("OpenCaching.CZ", "www.opencaching.cz", GEOCODE_PREFIX); + } + + @Override + @Nullable + public String getGeocodeFromUrl(@NonNull final String url) { + if (!StringUtils.containsIgnoreCase(url, "opencaching.cz")) { + return null; + } + final String id = StringUtils.substringAfter(url, "cacheid="); + try { + final String geocode = GEOCODE_PREFIX + StringUtils.leftPad(Integer.toHexString(Integer.parseInt(id)), 4, '0'); + if (canHandle(geocode)) { + return geocode; + } + } catch (final NumberFormatException e) { + Log.e("Unexpected URL for opencaching.cz " + url); + } + return super.getGeocodeFromUrl(url); + } +} diff --git a/main/src/cgeo/geocaching/connector/oc/OCConnector.java b/main/src/cgeo/geocaching/connector/oc/OCConnector.java index 8ac457b..6d7b23a 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCConnector.java @@ -5,7 +5,9 @@ import cgeo.geocaching.R; import cgeo.geocaching.connector.AbstractConnector; import cgeo.geocaching.enumerations.LogType; +import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import java.util.Arrays; import java.util.List; @@ -83,4 +85,24 @@ public class OCConnector extends AbstractConnector { return STANDARD_LOG_TYPES; } + + @Override + @Nullable + public String getGeocodeFromUrl(@NonNull final String url) { + // different opencaching installations have different supported URLs + + // host.tld/geocode + final String shortHost = StringUtils.remove(getHost(), "www."); + String geocode = StringUtils.substringAfter(url, shortHost + "/"); + if (canHandle(geocode)) { + return geocode; + } + + // host.tld/viewcache.php?wp=geocode + geocode = StringUtils.substringAfter(url, shortHost + "/viewcache.php?wp="); + if (canHandle(geocode)) { + return geocode; + } + return super.getGeocodeFromUrl(url); + } } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java index 275a103..e7d4e6f 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java @@ -30,6 +30,7 @@ import cgeo.geocaching.network.OAuth; import cgeo.geocaching.network.OAuthTokens; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.settings.Settings; +import cgeo.geocaching.utils.HtmlUtils; import cgeo.geocaching.utils.JsonUtils; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.SynchronizedDateFormat; @@ -62,8 +63,16 @@ import java.util.Map; import java.util.TimeZone; import java.util.regex.Pattern; +/** + * Client for the OpenCaching API (Okapi). + * + * @see <a href="http://www.opencaching.de/okapi/introduction.html">Okapi overview</a> + * + */ final class OkapiClient { + private static final String PARAMETER_LOGCOUNT_VALUE = "all"; + private static final String PARAMETER_LOGCOUNT_KEY = "lpc"; private static final char SEPARATOR = '|'; private static final String SEPARATOR_STRING = Character.toString(SEPARATOR); private static final SynchronizedDateFormat LOG_DATE_FORMAT = new SynchronizedDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", TimeZone.getTimeZone("UTC"), Locale.US); @@ -149,6 +158,7 @@ final class OkapiClient { params.add("fields", getFullFields(ocapiConn)); params.add("attribution_append", "none"); + params.add(PARAMETER_LOGCOUNT_KEY, PARAMETER_LOGCOUNT_VALUE); final JSONResult result = request(ocapiConn, OkapiService.SERVICE_CACHE, params); @@ -458,7 +468,7 @@ final class OkapiClient { parseUser(logResponse.get(LOG_USER)), parseDate(logResponse.get(LOG_DATE).asText()).getTime(), parseLogType(logResponse.get(LOG_TYPE).asText()), - logResponse.get(LOG_COMMENT).asText().trim()); + HtmlUtils.removeExtraParagraph(logResponse.get(LOG_COMMENT).asText().trim())); result.add(log); } catch (final NullPointerException e) { Log.e("OkapiClient.parseLogs", e); |