aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-06-22 08:14:42 +0200
committerBananeweizen <bananeweizen@gmx.de>2013-06-22 08:14:42 +0200
commit71629eecbed3793ec62f1e769927d52b773e27a0 (patch)
treeed938223da96b3ff7e07721f43a4e2a073d883e0 /main/src/cgeo/geocaching
parent7d2824e874c1bf963edb193966d68084b567dfe4 (diff)
downloadcgeo-71629eecbed3793ec62f1e769927d52b773e27a0.zip
cgeo-71629eecbed3793ec62f1e769927d52b773e27a0.tar.gz
cgeo-71629eecbed3793ec62f1e769927d52b773e27a0.tar.bz2
fix #2907: TB search broken
Diffstat (limited to 'main/src/cgeo/geocaching')
-rw-r--r--main/src/cgeo/geocaching/TrackableActivity.java11
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java20
-rw-r--r--main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java2
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) {