diff options
author | Bananeweizen <bananeweizen@gmx.de> | 2013-06-23 10:42:15 +0200 |
---|---|---|
committer | Bananeweizen <bananeweizen@gmx.de> | 2013-06-23 10:42:15 +0200 |
commit | e733eb45200b16ed4b59b87c113a3044c52316ca (patch) | |
tree | 18a8eb060cb12b0b18eacf9cfd102ca63655f9d9 /main/src/cgeo | |
parent | d2e4b2723f08afaff855d690be1fc79eb4630371 (diff) | |
download | cgeo-e733eb45200b16ed4b59b87c113a3044c52316ca.zip cgeo-e733eb45200b16ed4b59b87c113a3044c52316ca.tar.gz cgeo-e733eb45200b16ed4b59b87c113a3044c52316ca.tar.bz2 |
fix #2907: opening TB from cache inventory broken
Diffstat (limited to 'main/src/cgeo')
3 files changed, 33 insertions, 10 deletions
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index 9963d45..d1f323c 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -7,6 +7,7 @@ import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractViewPagerActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.trackable.TrackableConnector; +import cgeo.geocaching.connector.trackable.TravelBugConnector; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Units; import cgeo.geocaching.network.HtmlImage; @@ -231,19 +232,25 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi @Override public void run() { - trackable = cgData.loadTrackable(geocode); - - if (trackable == null || trackable.isLoggable()) { - // 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; + if (StringUtils.isNotEmpty(geocode)) { + trackable = cgData.loadTrackable(geocode); + + if (trackable == null || trackable.isLoggable()) { + // 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; + } } } } } + // fall back to GC search by GUID + if (trackable == null) { + trackable = TravelBugConnector.getInstance().searchTrackable(geocode, guid, id); + } handler.sendMessage(Message.obtain()); } } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 2cf2588..a2b0192 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -47,7 +47,7 @@ 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(), + TravelBugConnector.getInstance(), UNKNOWN_TRACKABLE_CONNECTOR // must be last }; diff --git a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java index 9cae016..0dac6cc 100644 --- a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java @@ -31,4 +31,20 @@ public class TravelBugConnector extends AbstractTrackableConnector { public Trackable searchTrackable(String geocode, String guid, String id) { return GCParser.searchTrackable(geocode, guid, id); } + + /** + * initialization on demand holder pattern + */ + private static class Holder { + private static final TravelBugConnector INSTANCE = new TravelBugConnector(); + } + + private TravelBugConnector() { + // singleton + } + + public static TravelBugConnector getInstance() { + return Holder.INSTANCE; + } + }
\ No newline at end of file |