diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-06-16 09:19:17 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-06-16 09:19:17 +0200 |
| commit | 5ec036f9c60d4ae2e0374b4547c07fd7ce550ad1 (patch) | |
| tree | b4a95d8ba53087bd57a0f92d7510c6c9bb8bb4d9 /main/src/cgeo/geocaching/connector | |
| parent | 08a33325f9872d0b3b37eac7028d5540a5330d08 (diff) | |
| download | cgeo-5ec036f9c60d4ae2e0374b4547c07fd7ce550ad1.zip cgeo-5ec036f9c60d4ae2e0374b4547c07fd7ce550ad1.tar.gz cgeo-5ec036f9c60d4ae2e0374b4547c07fd7ce550ad1.tar.bz2 | |
new: show basic geokrety information
Diffstat (limited to 'main/src/cgeo/geocaching/connector')
5 files changed, 108 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java b/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java index a351ebd..8387076 100644 --- a/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/GeokretyConnector.java @@ -1,6 +1,7 @@ package cgeo.geocaching.connector.trackable; import cgeo.geocaching.Trackable; +import cgeo.geocaching.network.Network; import cgeo.geocaching.utils.Log; import java.util.regex.Pattern; @@ -16,12 +17,21 @@ public class GeokretyConnector extends AbstractTrackableConnector { @Override public String getUrl(Trackable trackable) { - return "http://geokrety.org/konkret.php?id=" + getId(trackable); + return "http://geokrety.org/konkret.php?id=" + getId(trackable.getGeocode()); } - private static int getId(Trackable trackable) { + @Override + public Trackable searchTrackable(String geocode, String guid, String id) { + final String page = Network.getResponseData(Network.getRequest("http://geokrety.org/export2.php?gkid=" + getId(geocode))); + if (page == null) { + return null; + } + return GeokretyParser.parse(page); + } + + private static int getId(String geocode) { try { - final String hex = trackable.getGeocode().substring(2); + final String hex = geocode.substring(2); return Integer.parseInt(hex, 16); } catch (final NumberFormatException e) { Log.e("Trackable.getUrl", e); diff --git a/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java new file mode 100644 index 0000000..66ca5f7 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java @@ -0,0 +1,82 @@ +package cgeo.geocaching.connector.trackable; + +import cgeo.geocaching.R; +import cgeo.geocaching.Trackable; +import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.utils.Log; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import android.sax.Element; +import android.sax.EndTextElementListener; +import android.sax.RootElement; +import android.sax.StartElementListener; +import android.util.Xml; + +public class GeokretyParser { + + public static Trackable parse(final String page) { + final Trackable trackable = new Trackable(); + + final RootElement root = new RootElement("gkxml"); + final Element geokret = root.getChild("geokrety").getChild("geokret"); + + geokret.setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String name) { + trackable.setName(name); + } + }); + + geokret.setStartElementListener(new StartElementListener() { + + @Override + public void start(Attributes attributes) { + try { + if (attributes.getIndex("id") > -1) { + trackable.setGeocode(geocode(Integer.valueOf(attributes.getValue("id")))); + } + if (attributes.getIndex("dist") > -1) { + trackable.setDistance(Float.valueOf(attributes.getValue("dist"))); + } + if (attributes.getIndex("type") > -1) { + trackable.setType(getType(Integer.valueOf(attributes.getValue("type")))); + } + } catch (final NumberFormatException e) { + Log.e("Parsing geokret", e); + } + } + }); + + try { + Xml.parse(page, root.getContentHandler()); + return trackable; + } catch (final SAXException e) { + Log.w("Cannot parse geokrety", e); + } + + return null; + } + + protected static String getType(int type) { + switch (type) { + case 0: + return cgeoapplication.getInstance().getString(R.string.geokret_type_traditional); + case 1: + return cgeoapplication.getInstance().getString(R.string.geokret_type_book_or_media); + case 2: + return cgeoapplication.getInstance().getString(R.string.geokret_type_human); + case 3: + return cgeoapplication.getInstance().getString(R.string.geokret_type_coin); + case 4: + return cgeoapplication.getInstance().getString(R.string.geokret_type_post); + } + return null; + } + + protected static String geocode(final int id) { + return String.format("GK%04X", id); + } +} diff --git a/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java b/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java index 7df8560..c09dc07 100644 --- a/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/TrackableConnector.java @@ -14,4 +14,6 @@ public interface TrackableConnector { public boolean isLoggable(); + public Trackable searchTrackable(String geocode, String guid, String id); + } diff --git a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java index 74e0ec5..9ca7716 100644 --- a/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/TravelBugConnector.java @@ -1,6 +1,7 @@ package cgeo.geocaching.connector.trackable; import cgeo.geocaching.Trackable; +import cgeo.geocaching.connector.gc.GCParser; import java.util.regex.Pattern; @@ -25,4 +26,9 @@ public class TravelBugConnector extends AbstractTrackableConnector { public boolean isLoggable() { return true; } + + @Override + public Trackable searchTrackable(String geocode, String guid, String id) { + return GCParser.searchTrackable(geocode, guid, id); + } }
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java b/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java index 17fa680..0295927 100644 --- a/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java +++ b/main/src/cgeo/geocaching/connector/trackable/UnknownTrackableConnector.java @@ -16,4 +16,9 @@ public class UnknownTrackableConnector extends AbstractTrackableConnector { return StringUtils.EMPTY; } + @Override + public Trackable searchTrackable(String geocode, String guid, String id) { + return null; + } + } |
