diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2011-08-27 21:33:06 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2011-08-27 21:33:06 +0200 |
| commit | afbe8c5164e1157e38e0f8c4b28942cbd9fe3d41 (patch) | |
| tree | 2adf26bc568b26c40a0170b4cc8addfd0fad2e00 /src | |
| parent | c9b4637e92f789f27f643836e838f5a0fdd5050d (diff) | |
| download | cgeo-afbe8c5164e1157e38e0f8c4b28942cbd9fe3d41.zip cgeo-afbe8c5164e1157e38e0f8c4b28942cbd9fe3d41.tar.gz cgeo-afbe8c5164e1157e38e0f8c4b28942cbd9fe3d41.tar.bz2 | |
new: support for importing opencaching.com GPX files (OX... caches)
Diffstat (limited to 'src')
| -rw-r--r-- | src/cgeo/geocaching/cgBase.java | 19 | ||||
| -rw-r--r-- | src/cgeo/geocaching/connector/ConnectorFactory.java | 2 | ||||
| -rw-r--r-- | src/cgeo/geocaching/connector/OCConnector.java | 4 | ||||
| -rw-r--r-- | src/cgeo/geocaching/connector/OXConnector.java | 21 | ||||
| -rw-r--r-- | src/cgeo/geocaching/files/GPXParser.java | 19 |
5 files changed, 52 insertions, 13 deletions
diff --git a/src/cgeo/geocaching/cgBase.java b/src/cgeo/geocaching/cgBase.java index 7f18024..cfa1a07 100644 --- a/src/cgeo/geocaching/cgBase.java +++ b/src/cgeo/geocaching/cgBase.java @@ -128,20 +128,19 @@ public class cgBase { "MMM/dd/yyyy", "dd MMM yy" }; - + HashMap<String, SimpleDateFormat> map = new HashMap<String, SimpleDateFormat>(); - + for (String format : formats) { map.put(format, new SimpleDateFormat(format, Locale.ENGLISH)); } - + gcCustomDateFormats = Collections.unmodifiableMap(map); } public final static SimpleDateFormat dateTbIn1 = new SimpleDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009 public final static SimpleDateFormat dateTbIn2 = new SimpleDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009 public final static SimpleDateFormat dateSqlIn = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 2010-07-25 14:44:01 - public final static SimpleDateFormat dateGPXIn = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 2010-04-20T07:00:00Z private Resources res = null; private HashMap<String, String> cookies = new HashMap<String, String>(); private static final String passMatch = "[/\\?&]*[Pp]ass(word)?=[^&^#^$]+"; @@ -1318,7 +1317,7 @@ public class cgBase { { final Matcher matcherFound = patternFound.matcher(page); final Matcher matcherFoundAlternative = patternFoundAlternative.matcher(page); - + if (matcherFound.find() || matcherFoundAlternative.find()) { cache.found = true; } @@ -1575,7 +1574,7 @@ public class cgBase { try { final Matcher matcherLogCounts = patternCountLogs.matcher(page); - + if (matcherLogCounts.find()) { final Matcher matcherLog = patternCountLog.matcher(matcherLogCounts.group(1)); @@ -1584,7 +1583,7 @@ public class cgBase { { String typeStr = matcherLog.group(1); String countStr = matcherLog.group(2); - + if (typeStr != null && typeStr.length() > 0 && logTypes.containsKey(typeStr.toLowerCase()) @@ -1907,9 +1906,9 @@ public class cgBase { { throw new ParseException("Input is null", 0); } - + input = input.trim(); - + for (SimpleDateFormat format : gcCustomDateFormats.values()) { try @@ -1918,7 +1917,7 @@ public class cgBase { } catch (ParseException e) {} } - + throw new ParseException("No matching pattern", 0); } diff --git a/src/cgeo/geocaching/connector/ConnectorFactory.java b/src/cgeo/geocaching/connector/ConnectorFactory.java index 9d8f955..d052231 100644 --- a/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -4,7 +4,7 @@ import cgeo.geocaching.cgCache; public final class ConnectorFactory { private static final GCConnector GC_CONNECTOR = new GCConnector(); - private static final IConnector[] connectors = new IConnector[] {GC_CONNECTOR, new OCConnector()}; + private static final IConnector[] connectors = new IConnector[] {GC_CONNECTOR, new OCConnector(), new OXConnector()}; public static IConnector[] getConnectors() { return connectors; diff --git a/src/cgeo/geocaching/connector/OCConnector.java b/src/cgeo/geocaching/connector/OCConnector.java index efe4232..d23b3cd 100644 --- a/src/cgeo/geocaching/connector/OCConnector.java +++ b/src/cgeo/geocaching/connector/OCConnector.java @@ -2,6 +2,10 @@ package cgeo.geocaching.connector; import cgeo.geocaching.cgCache; +/** + * connector for OpenCaching.de (and several other country domains) + * + */ public class OCConnector extends AbstractConnector implements IConnector { @Override public boolean canHandle(String geocode) { diff --git a/src/cgeo/geocaching/connector/OXConnector.java b/src/cgeo/geocaching/connector/OXConnector.java new file mode 100644 index 0000000..75d404e --- /dev/null +++ b/src/cgeo/geocaching/connector/OXConnector.java @@ -0,0 +1,21 @@ +package cgeo.geocaching.connector; + +import cgeo.geocaching.cgCache; + +/** + * connector for OpenCaching.com + * + */ +public class OXConnector extends AbstractConnector implements IConnector { + + @Override + public boolean canHandle(String geocode) { + return geocode != null && geocode.toUpperCase().startsWith("OX"); + } + + @Override + public String getCacheUrl(cgCache cache) { + return "http://www.opencaching.com/#!geocache/" + cache.geocode; + } + +} diff --git a/src/cgeo/geocaching/files/GPXParser.java b/src/cgeo/geocaching/files/GPXParser.java index 1a9bd7c..2a3b167 100644 --- a/src/cgeo/geocaching/files/GPXParser.java +++ b/src/cgeo/geocaching/files/GPXParser.java @@ -4,7 +4,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -31,6 +34,9 @@ import cgeo.geocaching.connector.ConnectorFactory; public abstract class GPXParser extends FileParser { + private static final SimpleDateFormat formatSimple = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 2010-04-20T07:00:00Z + private static final SimpleDateFormat formatTimezone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000'Z"); // 2010-04-20T01:01:03.000-04:00 + private static final Pattern patternGeocode = Pattern.compile("([A-Z]{2}[0-9A-Z]+)", Pattern.CASE_INSENSITIVE); private static final String[] nsGCList = new String[] { "http://www.groundspeak.com/cache/1/1", // PQ 1.1 @@ -65,6 +71,15 @@ public abstract class GPXParser extends FileParser { version = versionIn; } + private static Date parseDate(String input) throws ParseException { + input = input.trim(); + if (input.length() >= 3 && input.charAt(input.length() - 3) == ':') { + String removeColon = input.substring(0, input.length() - 3) + input.substring(input.length() - 2); + return formatTimezone.parse(removeColon); + } + return formatSimple.parse(input); + } + public long parse(File file, Handler handlerIn) { handler = handlerIn; if (file == null) { @@ -137,7 +152,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(String body) { try { - cache.hidden = cgBase.dateGPXIn.parse(body.trim()); + cache.hidden = parseDate(body); } catch (Exception e) { Log.w(cgSettings.tag, "Failed to parse cache date: " + e.toString()); } @@ -478,7 +493,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(String body) { try { - log.date = cgBase.dateGPXIn.parse(body.trim()).getTime(); + log.date = parseDate(body).getTime(); } catch (Exception e) { Log.w(cgSettings.tag, "Failed to parse log date: " + e.toString()); } |
