diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-12-16 12:48:31 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-12-16 12:48:31 +0100 |
| commit | fc124633817d4d15cd6bf58487f19a1d73e64459 (patch) | |
| tree | b3208a5c12fc2136bc0f38fe8ee7bc78b141d1ca /main/src/cgeo/geocaching | |
| parent | 14874d409a6547bc36c3b3946d55a81ad61da97a (diff) | |
| download | cgeo-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')
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() { |
