diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-06-22 08:14:42 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-06-22 08:14:42 +0200 |
| commit | 71629eecbed3793ec62f1e769927d52b773e27a0 (patch) | |
| tree | ed938223da96b3ff7e07721f43a4e2a073d883e0 /main/src | |
| parent | 7d2824e874c1bf963edb193966d68084b567dfe4 (diff) | |
| download | cgeo-71629eecbed3793ec62f1e769927d52b773e27a0.zip cgeo-71629eecbed3793ec62f1e769927d52b773e27a0.tar.gz cgeo-71629eecbed3793ec62f1e769927d52b773e27a0.tar.bz2 | |
fix #2907: TB search broken
Diffstat (limited to 'main/src')
3 files changed, 22 insertions, 11 deletions
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index 13330fd..8dc29ee 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -287,8 +287,15 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi trackable = cgData.loadTrackable(geocode); if (trackable == null || trackable.isLoggable()) { - final TrackableConnector trackableConnector = ConnectorFactory.getTrackableConnector(geocode); - trackable = trackableConnector.searchTrackable(geocode, guid, id); + // iterate over the connectors as some codes may be handled by multiple connectors + for (final TrackableConnector trackableConnector : ConnectorFactory.getTrackableConnectors()) { + if (trackableConnector.canHandleTrackable(geocode)) { + trackable = trackableConnector.searchTrackable(geocode, guid, id); + if (trackable != null) { + break; + } + } + } } handler.sendMessage(Message.obtain()); } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 1849e4b..2cf2588 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -25,7 +25,7 @@ import java.util.List; public final class ConnectorFactory { private static final UnknownConnector UNKNOWN_CONNECTOR = new UnknownConnector(); - private static final IConnector[] connectors = new IConnector[] { + private static final IConnector[] CONNECTORS = new IConnector[] { GCConnector.getInstance(), new OCApiLiveConnector("Opencaching.de", "www.opencaching.de", "OC", R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret, ApiSupport.current), new OCConnector("OpenCaching.CZ", "www.opencaching.cz", "OZ"), @@ -46,8 +46,8 @@ public final class ConnectorFactory { public static final UnknownTrackableConnector UNKNOWN_TRACKABLE_CONNECTOR = new UnknownTrackableConnector(); private static final TrackableConnector[] TRACKABLE_CONNECTORS = new TrackableConnector[] { + new GeokretyConnector(), // GK must be first, as it overlaps with the secret codes of travel bugs new TravelBugConnector(), - new GeokretyConnector(), UNKNOWN_TRACKABLE_CONNECTOR // must be last }; @@ -57,7 +57,7 @@ public final class ConnectorFactory { static { final List<ISearchByViewPort> vpConns = new ArrayList<ISearchByViewPort>(); - for (final IConnector conn : connectors) { + for (final IConnector conn : CONNECTORS) { if (conn instanceof ISearchByViewPort) { vpConns.add((ISearchByViewPort) conn); } @@ -65,7 +65,7 @@ public final class ConnectorFactory { searchByViewPortConns = vpConns.toArray(new ISearchByViewPort[vpConns.size()]); final List<ISearchByCenter> centerConns = new ArrayList<ISearchByCenter>(); - for (final IConnector conn : connectors) { + for (final IConnector conn : CONNECTORS) { // GCConnector is handled specially, omit it here! if (conn instanceof ISearchByCenter && !(conn instanceof GCConnector)) { centerConns.add((ISearchByCenter) conn); @@ -75,7 +75,7 @@ public final class ConnectorFactory { } public static IConnector[] getConnectors() { - return connectors; + return CONNECTORS; } public static ISearchByCenter[] getSearchByCenterConnectors() { @@ -86,7 +86,7 @@ public final class ConnectorFactory { if (isInvalidGeocode(geocode)) { return false; } - for (final IConnector connector : connectors) { + for (final IConnector connector : CONNECTORS) { if (connector.canHandle(geocode)) { return true; } @@ -117,7 +117,7 @@ public final class ConnectorFactory { if (isInvalidGeocode(geocode)) { return UNKNOWN_CONNECTOR; } - for (final IConnector connector : connectors) { + for (final IConnector connector : CONNECTORS) { if (connector.canHandle(geocode)) { return connector; } @@ -146,7 +146,7 @@ public final class ConnectorFactory { } public static String getGeocodeFromURL(final String url) { - for (final IConnector connector : connectors) { + for (final IConnector connector : CONNECTORS) { final String geocode = connector.getGeocodeFromUrl(url); if (StringUtils.isNotBlank(geocode)) { return geocode; @@ -155,4 +155,8 @@ public final class ConnectorFactory { return null; } + public static TrackableConnector[] getTrackableConnectors() { + return TRACKABLE_CONNECTORS; + } + } diff --git a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java index 9ca7716..9cae016 100644 --- a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java @@ -10,7 +10,7 @@ public class TravelBugConnector extends AbstractTrackableConnector { /** * TB codes really start with TB1, there is no padding or minimum length */ - private final static Pattern PATTERN_TB_CODE = Pattern.compile("TB[0-9A-Z]+", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_TB_CODE = Pattern.compile("(TB[0-9A-Z]+)|([0-9A-Z]{6})", Pattern.CASE_INSENSITIVE); @Override public boolean canHandleTrackable(String geocode) { |
