diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2012-12-12 22:09:06 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2012-12-12 22:09:06 +0100 |
| commit | bbae53519d0b178b13e517d337ef0d88c0e312d4 (patch) | |
| tree | 0606647451a580d4f21f633c2f3a921a2032d21e /main | |
| parent | 9a9000f770fd6a58b14cb970eabc6d4ab2f9d51b (diff) | |
| download | cgeo-bbae53519d0b178b13e517d337ef0d88c0e312d4.zip cgeo-bbae53519d0b178b13e517d337ef0d88c0e312d4.tar.gz cgeo-bbae53519d0b178b13e517d337ef0d88c0e312d4.tar.bz2 | |
fix #2250: "Scan QR code" doesn't work anymore
Diffstat (limited to 'main')
10 files changed, 77 insertions, 7 deletions
diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 35fe70d..65003e2 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -100,9 +100,14 @@ public class SearchActivity extends AbstractActivity { * @return true if a search was performed, else false */ private boolean instantSearch(final String query, final boolean keywordSearch) { + // first check if this was a scanned URL + String geocode = ConnectorFactory.getGeocodeFromURL(query); + + // otherwise see if this is a pure geocode + if (StringUtils.isEmpty(geocode)) { + geocode = StringUtils.trim(query); + } - // Check if any connector can handle the query as a geocode - final String geocode = StringUtils.trim(query); final IConnector connector = ConnectorFactory.getConnector(geocode); if (connector instanceof ISearchByGeocode) { final Intent cachesIntent = new Intent(this, CacheDetailActivity.class); diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index aa75f3b..112d6cf 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -4,6 +4,8 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgCache; import cgeo.geocaching.geopoint.Viewport; +import org.apache.commons.lang3.StringUtils; + public abstract class AbstractConnector implements IConnector { @Override @@ -65,4 +67,18 @@ public abstract class AbstractConnector implements IConnector { public String[] getTokens() { return null; } + + @Override + public String getGeocodeFromUrl(final String url) { + final String urlPrefix = getCacheUrlPrefix(); + if (StringUtils.startsWith(url, urlPrefix)) { + String geocode = url.substring(urlPrefix.length()); + if (canHandle(geocode)) { + return geocode; + } + } + return null; + } + + abstract protected String getCacheUrlPrefix(); } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index b9b8263..bc4dcc0 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -81,4 +81,14 @@ public final class ConnectorFactory { return GCConnector.getInstance().searchByViewport(viewport, tokens); } + public static String getGeocodeFromURL(final String url) { + for (IConnector connector : connectors) { + String geocode = connector.getGeocodeFromUrl(url); + if (StringUtils.isNotBlank(geocode)) { + return geocode; + } + } + return null; + } + } diff --git a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java index 771f5d2..30d1a4b 100644 --- a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java +++ b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java @@ -13,7 +13,7 @@ public class GeocachingAustraliaConnector extends AbstractConnector { @Override public String getCacheUrl(final cgCache cache) { - return "http://" + getHost() + "/cache/" + cache.getGeocode(); + return getCacheUrlPrefix() + cache.getGeocode(); } @Override @@ -25,4 +25,9 @@ public class GeocachingAustraliaConnector extends AbstractConnector { public boolean canHandle(final String geocode) { return (StringUtils.startsWithIgnoreCase(geocode, "GA") || StringUtils.startsWithIgnoreCase(geocode, "TP")) && isNumericId(geocode.substring(2)); } + + @Override + protected String getCacheUrlPrefix() { + return "http://" + getHost() + "/cache/"; + } } diff --git a/main/src/cgeo/geocaching/connector/GeopeitusConnector.java b/main/src/cgeo/geocaching/connector/GeopeitusConnector.java index fa19d80..6ef91db 100644 --- a/main/src/cgeo/geocaching/connector/GeopeitusConnector.java +++ b/main/src/cgeo/geocaching/connector/GeopeitusConnector.java @@ -13,7 +13,7 @@ public class GeopeitusConnector extends AbstractConnector { @Override public String getCacheUrl(final cgCache cache) { - return "http://" + getHost() + "/aare/" + StringUtils.stripStart(cache.getGeocode().substring(2), "0"); + return getCacheUrlPrefix() + StringUtils.stripStart(cache.getGeocode().substring(2), "0"); } @Override @@ -25,4 +25,9 @@ public class GeopeitusConnector extends AbstractConnector { public boolean canHandle(String geocode) { return StringUtils.startsWith(geocode, "GE") && isNumericId(geocode.substring(2)); } + + @Override + protected String getCacheUrlPrefix() { + return "http://" + getHost() + "/aare/"; + } } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 9111955..d6ac2ff 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -37,7 +37,7 @@ public interface IConnector { /** * enable/disable favorite points controls in cache details - * + * * @return */ public boolean supportsFavoritePoints(); @@ -104,4 +104,12 @@ public interface IConnector { */ public String[] getTokens(); + /** + * extract a geocode from the given URL, if this connector can handle that URL somehow + * + * @param url + * @return + */ + public String getGeocodeFromUrl(final String url); + } diff --git a/main/src/cgeo/geocaching/connector/UnknownConnector.java b/main/src/cgeo/geocaching/connector/UnknownConnector.java index 5e8d3f3..991d31c 100644 --- a/main/src/cgeo/geocaching/connector/UnknownConnector.java +++ b/main/src/cgeo/geocaching/connector/UnknownConnector.java @@ -25,4 +25,9 @@ public class UnknownConnector extends AbstractConnector { public boolean canHandle(final String geocode) { return StringUtils.isNotBlank(geocode); } + + @Override + protected String getCacheUrlPrefix() { + return null; + } } diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index db43239..8a8c686 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -20,6 +20,7 @@ import java.util.regex.Pattern; public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter { + private static final String HTTP_COORD_INFO = "http://coord.info/"; private static GCConnector instance; private static final Pattern gpxZipFilePattern = Pattern.compile("\\d{7,}(_.+)?\\.zip", Pattern.CASE_INSENSITIVE); @@ -167,4 +168,8 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, return true; } + @Override + protected String getCacheUrlPrefix() { + return HTTP_COORD_INFO; + } } diff --git a/main/src/cgeo/geocaching/connector/oc/OCConnector.java b/main/src/cgeo/geocaching/connector/oc/OCConnector.java index 34bf019..c098d12 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCConnector.java @@ -33,7 +33,7 @@ public class OCConnector extends AbstractConnector { @Override public String getCacheUrl(cgCache cache) { - return "http://" + host + "/viewcache.php?wp=" + cache.getGeocode(); + return getCacheUrlPrefix() + cache.getGeocode(); } @Override @@ -45,4 +45,10 @@ public class OCConnector extends AbstractConnector { public boolean isZippedGPXFile(String fileName) { return gpxZipFilePattern.matcher(fileName).matches(); } + + @Override + protected String getCacheUrlPrefix() { + return "http://" + host + "/viewcache.php?wp="; + } + } diff --git a/main/src/cgeo/geocaching/connector/ox/OXConnector.java b/main/src/cgeo/geocaching/connector/ox/OXConnector.java index 38bb496..98b1656 100644 --- a/main/src/cgeo/geocaching/connector/ox/OXConnector.java +++ b/main/src/cgeo/geocaching/connector/ox/OXConnector.java @@ -27,7 +27,7 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I @Override public String getCacheUrl(cgCache cache) { - return "http://www.opencaching.com/#!geocache/" + cache.getGeocode(); + return getCacheUrlPrefix() + cache.getGeocode(); } @Override @@ -64,4 +64,9 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I } return new SearchResult(caches); } + + @Override + protected String getCacheUrlPrefix() { + return "http://www.opencaching.com/#!geocache/"; + } } |
