diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2011-10-12 07:43:22 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2011-10-12 07:43:22 +0200 |
| commit | 862a05d3cf1e67d9e4e581b02e9818c41639a79d (patch) | |
| tree | 8cf1911eacafacb978e5b41190132341ba1d8db3 | |
| parent | c727dbe4119a8b798a94588abe1010dcabfebbb4 (diff) | |
| download | cgeo-862a05d3cf1e67d9e4e581b02e9818c41639a79d.zip cgeo-862a05d3cf1e67d9e4e581b02e9818c41639a79d.tar.gz cgeo-862a05d3cf1e67d9e4e581b02e9818c41639a79d.tar.bz2 | |
new: support Geocaching Australia caches (GAxxxx, TPxxxx)
* most cache details are not available due to wrong schema in their GPX
files, but I requested them to change that
7 files changed, 69 insertions, 12 deletions
diff --git a/main/src/cgeo/geocaching/cgeogpxes.java b/main/src/cgeo/geocaching/cgeogpxes.java index acee766..8e5d22b 100644 --- a/main/src/cgeo/geocaching/cgeogpxes.java +++ b/main/src/cgeo/geocaching/cgeogpxes.java @@ -35,6 +35,10 @@ public class cgeogpxes extends FileList<cgGPXListAdapter> { public void handleMessage(Message msg) { if (parseDialog != null) { parseDialog.setMessage(res.getString(msg.arg1) + " " + msg.arg2); + if (msg.obj != null) { + final int progress = (Integer) msg.obj; + parseDialog.setProgress(progress); + } } } }; @@ -82,12 +86,13 @@ public class cgeogpxes extends FileList<cgGPXListAdapter> { public void loadGPX(File file) { - parseDialog = ProgressDialog.show( - this, - res.getString(R.string.gpx_import_title_reading_file), - res.getString(R.string.gpx_import_loading), - true, - false); + parseDialog = new ProgressDialog(this); + parseDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + parseDialog.setTitle(res.getString(R.string.gpx_import_title_reading_file)); + parseDialog.setMessage(res.getString(R.string.gpx_import_loading)); + parseDialog.setCancelable(false); + parseDialog.setMax((int) file.length()); + parseDialog.show(); new loadCaches(file).start(); } diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 6ea450d..1a3048a 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -50,4 +50,12 @@ public abstract class AbstractConnector implements IConnector { public UUID searchByGeocode(cgBase base, String geocode, String guid, cgeoapplication app, cgSearch search, int reason, Handler handler) { return null; } + + protected static boolean isNumericId(final String string) { + try { + return Integer.valueOf(string) > 0; + } catch (NumberFormatException e) { + } + return false; + } } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 788df13..2ad4de2 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -4,6 +4,8 @@ import cgeo.geocaching.cgCache; import cgeo.geocaching.connector.opencaching.ApiOpenCachingConnector; import cgeo.geocaching.connector.opencaching.OpenCachingConnector; +import org.apache.commons.lang3.StringUtils; + public final class ConnectorFactory { private static final GCConnector GC_CONNECTOR = new GCConnector(); private static final IConnector[] connectors = new IConnector[] { @@ -18,7 +20,8 @@ public final class ConnectorFactory { new OpenCachingConnector("OpenCaching.NL", "www.opencaching.nl", "OB"), new ApiOpenCachingConnector("OpenCaching.PL", "www.opencaching.pl", "OP", "GkxM47WkUkLQXXsZ9qSh"), new ApiOpenCachingConnector("OpenCaching.US", "www.opencaching.us", "OU", "pTsYAYSXFcfcRQnYE6uA"), - new OXConnector() + new OXConnector(), + new GeocachingAustraliaConnector() }; public static IConnector[] getConnectors() { @@ -26,6 +29,9 @@ public final class ConnectorFactory { } public static boolean canHandle(final String geocode) { + if (isInvalidGeocode(geocode)) { + return false; + } for (IConnector connector : connectors) { if (connector.canHandle(geocode)) { return true; @@ -39,6 +45,9 @@ public final class ConnectorFactory { } public static IConnector getConnector(String geocode) { + if (isInvalidGeocode(geocode)) { + return GC_CONNECTOR; + } for (IConnector connector : connectors) { if (connector.canHandle(geocode)) { return connector; @@ -47,4 +56,11 @@ public final class ConnectorFactory { // in case of errors, assume GC as default return GC_CONNECTOR; } + + private static boolean isInvalidGeocode(final String geocode) { + if (StringUtils.isBlank(geocode) || geocode.length() <= 2) { + return true; + } + return false; + } } diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java index 7699a74..823c171 100644 --- a/main/src/cgeo/geocaching/connector/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/GCConnector.java @@ -23,7 +23,7 @@ public class GCConnector extends AbstractConnector implements IConnector { @Override public boolean canHandle(String geocode) { - return StringUtils.isNotBlank(geocode) && StringUtils.startsWithIgnoreCase(geocode, "GC"); + return StringUtils.startsWithIgnoreCase(geocode, "GC"); } @Override @@ -83,7 +83,7 @@ public class GCConnector extends AbstractConnector implements IConnector { base.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_loadpage); - String page = cgBase.requestLogged("http://www.geocaching.com/seek/cache_details.aspx", params, false, false, false); + final String page = cgBase.requestLogged("http://www.geocaching.com/seek/cache_details.aspx", params, false, false, false); if (StringUtils.isEmpty(page)) { if (app.isThere(geocode, guid, true, false)) { @@ -125,7 +125,7 @@ public class GCConnector extends AbstractConnector implements IConnector { return null; } - List<cgCache> cacheList = cgBase.filterSearchResults(search, caches, false, false, null); + final List<cgCache> cacheList = cgBase.filterSearchResults(search, caches, false, false, null); app.addSearch(search, cacheList, true, reason); return search.getCurrentId(); diff --git a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java new file mode 100644 index 0000000..58f4743 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java @@ -0,0 +1,28 @@ +package cgeo.geocaching.connector; + +import cgeo.geocaching.cgCache; + +import org.apache.commons.lang3.StringUtils; + +public class GeocachingAustraliaConnector extends AbstractConnector implements IConnector { + + @Override + public String getName() { + return "Geocaching Australia"; + } + + @Override + public String getCacheUrl(final cgCache cache) { + return "http://" + getHost() + "/cache/" + cache.geocode; + } + + @Override + public String getHost() { + return "geocaching.com.au"; + } + + @Override + public boolean canHandle(final String geocode) { + return (StringUtils.startsWithIgnoreCase(geocode, "GA") || StringUtils.startsWithIgnoreCase(geocode, "TP")) && isNumericId(geocode.substring(2)); + } +} diff --git a/main/src/cgeo/geocaching/connector/OXConnector.java b/main/src/cgeo/geocaching/connector/OXConnector.java index ca2f4b9..78d60b7 100644 --- a/main/src/cgeo/geocaching/connector/OXConnector.java +++ b/main/src/cgeo/geocaching/connector/OXConnector.java @@ -12,7 +12,7 @@ public class OXConnector extends AbstractConnector implements IConnector { @Override public boolean canHandle(String geocode) { - return StringUtils.isNotBlank(geocode) && StringUtils.startsWithIgnoreCase(geocode, "OX"); + return StringUtils.startsWithIgnoreCase(geocode, "OX"); } @Override diff --git a/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java index 0fe69f5..273c4cd 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java +++ b/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java @@ -20,7 +20,7 @@ public class OpenCachingConnector extends AbstractConnector implements IConnecto @Override public boolean canHandle(String geocode) { - return StringUtils.isNotBlank(geocode) && StringUtils.startsWithIgnoreCase(geocode, prefix); + return StringUtils.startsWithIgnoreCase(geocode, prefix); } @Override |
