aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/connector/oc
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/connector/oc')
-rw-r--r--main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java9
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCCZConnector.java34
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCConnector.java22
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java12
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);