aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-12-16 12:48:31 +0100
committerBananeweizen <bananeweizen@gmx.de>2013-12-16 12:48:31 +0100
commitfc124633817d4d15cd6bf58487f19a1d73e64459 (patch)
treeb3208a5c12fc2136bc0f38fe8ee7bc78b141d1ca /main/src/cgeo/geocaching
parent14874d409a6547bc36c3b3946d55a81ad61da97a (diff)
downloadcgeo-fc124633817d4d15cd6bf58487f19a1d73e64459.zip
cgeo-fc124633817d4d15cd6bf58487f19a1d73e64459.tar.gz
cgeo-fc124633817d4d15cd6bf58487f19a1d73e64459.tar.bz2
integrate extremcaching.com
* cherry-pick existing commits and have some basic tests * disable EC connector by default * fix faked geocodes during GPX import * parse wrongly encoded container size
Diffstat (limited to 'main/src/cgeo/geocaching')
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java3
-rw-r--r--main/src/cgeo/geocaching/connector/IConnector.java4
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECConnector.java6
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheSize.java24
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java21
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java2
6 files changed, 50 insertions, 10 deletions
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index a369a7c..5e102b9 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Geopoint;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import java.util.ArrayList;
import java.util.List;
@@ -15,7 +16,7 @@ import java.util.List;
public abstract class AbstractConnector implements IConnector {
@Override
- public boolean canHandle(String geocode) {
+ public boolean canHandle(@NonNull final String geocode) {
return false;
}
diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java
index 4ac8c55..f5f70b0 100644
--- a/main/src/cgeo/geocaching/connector/IConnector.java
+++ b/main/src/cgeo/geocaching/connector/IConnector.java
@@ -6,6 +6,8 @@ import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Geopoint;
+import org.eclipse.jdt.annotation.NonNull;
+
import java.util.List;
public interface IConnector {
@@ -22,7 +24,7 @@ public interface IConnector {
* @param geocode
* @return
*/
- public boolean canHandle(final String geocode);
+ public boolean canHandle(final @NonNull String geocode);
/**
* get browser URL for the given cache
diff --git a/main/src/cgeo/geocaching/connector/ec/ECConnector.java b/main/src/cgeo/geocaching/connector/ec/ECConnector.java
index 2edf0da..eb2f164 100644
--- a/main/src/cgeo/geocaching/connector/ec/ECConnector.java
+++ b/main/src/cgeo/geocaching/connector/ec/ECConnector.java
@@ -21,6 +21,7 @@ import cgeo.geocaching.settings.SettingsActivity;
import cgeo.geocaching.utils.CancellableHandler;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.content.Context;
import android.os.Handler;
@@ -56,10 +57,7 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode,
}
@Override
- public boolean canHandle(String geocode) {
- if (geocode == null) {
- return false;
- }
+ public boolean canHandle(@NonNull String geocode) {
return ECConnector.PATTERN_EC_CODE.matcher(geocode).matches();
}
diff --git a/main/src/cgeo/geocaching/enumerations/CacheSize.java b/main/src/cgeo/geocaching/enumerations/CacheSize.java
index a6f8df3..ee42c66 100644
--- a/main/src/cgeo/geocaching/enumerations/CacheSize.java
+++ b/main/src/cgeo/geocaching/enumerations/CacheSize.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.enumerations;
-import cgeo.geocaching.R;
import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.R;
import java.util.Collections;
import java.util.HashMap;
@@ -56,6 +56,28 @@ public enum CacheSize {
if (resultNormalized != null) {
return resultNormalized;
}
+ return getByNumber(id);
+ }
+
+ /**
+ * Bad GPX files can contain the container size encoded as number.
+ *
+ * @param id
+ * @return
+ */
+ private static CacheSize getByNumber(final String id) {
+ try {
+ int numerical = Integer.parseInt(id);
+ if (numerical != 0) {
+ for (CacheSize size : CacheSize.values()) {
+ if (size.comparable == numerical) {
+ return size;
+ }
+ }
+ }
+ } catch (NumberFormatException e) {
+ // ignore, as this might be a number or not
+ }
return UNKNOWN;
}
diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java
index 3e96291..4ebbb45 100644
--- a/main/src/cgeo/geocaching/files/GPXParser.java
+++ b/main/src/cgeo/geocaching/files/GPXParser.java
@@ -104,6 +104,10 @@ public abstract class GPXParser extends FileParser {
*/
private final Set<String> result = new HashSet<String>(100);
private ProgressInputStream progressStream;
+ /**
+ * URL contained in the header of the GPX file. Used to guess where the file is coming from.
+ */
+ protected String scriptUrl;
private final class UserDataListener implements EndTextElementListener {
private final int index;
@@ -265,6 +269,14 @@ public abstract class GPXParser extends FileParser {
final RootElement root = new RootElement(namespace, "gpx");
final Element waypoint = root.getChild(namespace, "wpt");
+ root.getChild(namespace, "url").setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String body) {
+ scriptUrl = body;
+ }
+ });
+
// waypoint - attributes
waypoint.setStartElementListener(new StartElementListener() {
@@ -382,14 +394,19 @@ public abstract class GPXParser extends FileParser {
}
});
- // waypoint.getName()
+ // waypoint.name
waypoint.getChild(namespace, "name").setEndTextElementListener(new EndTextElementListener() {
@Override
public void end(String body) {
name = body;
- final String content = body.trim();
+ String content = body.trim();
+
+ // extremcaching.com manipulates the GC code by adding GC in front of ECxxx
+ if (StringUtils.startsWithIgnoreCase(content, "GCEC") && StringUtils.containsIgnoreCase(scriptUrl, "extremcaching")) {
+ content = content.substring(2);
+ }
cache.setName(content);
findGeoCode(cache.getName());
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index b179e55..88d4344 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -312,7 +312,7 @@ public class Settings {
}
public static boolean isECConnectorActive() {
- return getBoolean(R.string.pref_connectorECActive, true);
+ return getBoolean(R.string.pref_connectorECActive, false);
}
public static boolean isPremiumMember() {