aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbananeweizen <bananeweizen@gmx.de>2011-08-26 18:11:43 +0100
committerbananeweizen <bananeweizen@gmx.de>2011-08-26 18:11:43 +0100
commit972778987373af34bbcf27bb5c828fe510ebd23c (patch)
treeb6fb7dae6727bcda1952c7bfc6c934553e02fe53 /src
parent191e33126e0bcb7afa58f884c3c4ea6ad6d83a82 (diff)
parent51fdc4596b1d9b27782946101663cfc3c399d027 (diff)
downloadcgeo-972778987373af34bbcf27bb5c828fe510ebd23c.zip
cgeo-972778987373af34bbcf27bb5c828fe510ebd23c.tar.gz
cgeo-972778987373af34bbcf27bb5c828fe510ebd23c.tar.bz2
Merge branch 'master' of https://Bananeweizen@github.com/cgeo/c-geo-opensource.git
Diffstat (limited to 'src')
-rw-r--r--src/cgeo/geocaching/cgBase.java98
1 files changed, 56 insertions, 42 deletions
diff --git a/src/cgeo/geocaching/cgBase.java b/src/cgeo/geocaching/cgBase.java
index e143ab7..7f18024 100644
--- a/src/cgeo/geocaching/cgBase.java
+++ b/src/cgeo/geocaching/cgBase.java
@@ -23,6 +23,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
@@ -80,11 +81,12 @@ public class cgBase {
private final static Pattern patternTerrain = Pattern.compile("<span id=\"ctl00_ContentBody_Localize6\"[^>]*>[^<]*<img src=\"[^\"]*/images/stars/stars([0-9_]+)\\.gif\" alt=\"[^\"]+\"[^>]*>[^<]*</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private final static Pattern patternOwner = Pattern.compile("<span class=\"minorCacheDetails\">\\W*An?(\\W*Event)?\\W*cache\\W*by[^<]*<a href=\"[^\"]+\">([^<]+)</a>[^<]*</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private final static Pattern patternOwnerReal = Pattern.compile("<a id=\"ctl00_ContentBody_uxFindLinksHiddenByThisUser\" href=\"[^\"]*/seek/nearest\\.aspx\\?u=*([^\"]+)\">[^<]+</a>", Pattern.CASE_INSENSITIVE);
- private final static Pattern patternHidden = Pattern.compile("<span[^>]*>\\W*Hidden[^\\d]*([^<]+)</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
+ private final static Pattern patternHidden = Pattern.compile("<span[^>]*>\\W*Hidden[\\s:]*([^<]+)</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private final static Pattern patternHiddenEvent = Pattern.compile("<span[^>]*>\\W*Event\\W*Date[^:]*:([^<]*)</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private final static Pattern patternFavourite = Pattern.compile("<a id=\"uxFavContainerLink\"[^>]*>[^<]*<div[^<]*<span class=\"favorite-value\">[^\\d]*([0-9]+)[^\\d^<]*</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private final static Pattern patternFound = Pattern.compile("<p>[^<]*<a id=\"ctl00_ContentBody_hlFoundItLog\"[^<]*<img src=\".*/images/stockholm/16x16/check\\.gif\"[^>]*>[^<]*</a>[^<]*</p>", Pattern.CASE_INSENSITIVE);
+ private final static Pattern patternFoundAlternative = Pattern.compile("<div class=\"StatusInformationWidget FavoriteWidget\"", Pattern.CASE_INSENSITIVE);
private final static Pattern patternLatLon = Pattern.compile("<span id=\"ctl00_ContentBody_LatLon\"[^>]*>(<b>)?([^<]*)(<\\/b>)?<\\/span>", Pattern.CASE_INSENSITIVE);
private final static Pattern patternLocation = Pattern.compile("<span id=\"ctl00_ContentBody_Location\"[^>]*>In ([^<]*)", Pattern.CASE_INSENSITIVE);
private final static Pattern patternHint = Pattern.compile("<p>([^<]*<strong>)?\\W*Additional Hints([^<]*<\\/strong>)?[^\\(]*\\(<a[^>]+>Encrypt</a>\\)[^<]*<\\/p>[^<]*<div id=\"div_hint\"[^>]*>(.*)</div>[^<]*<div id=[\\'|\"]dk[\\'|\"]", Pattern.CASE_INSENSITIVE);
@@ -116,9 +118,26 @@ public class cgBase {
public static HashMap<Integer, String> logTypesTrackable = new HashMap<Integer, String>();
public static HashMap<Integer, String> logTypesTrackableAction = new HashMap<Integer, String>();
public static HashMap<Integer, String> errorRetrieve = new HashMap<Integer, String>();
- public final static SimpleDateFormat dateInSlash = new SimpleDateFormat("MM/dd/yyyy");
- public final static SimpleDateFormat dateInDash = new SimpleDateFormat("yyyy-MM-dd");
- public final static SimpleDateFormat dateEvIn = new SimpleDateFormat("dd MMMMM yyyy", Locale.ENGLISH); // 28 March 2009
+ public static final Map<String, SimpleDateFormat> gcCustomDateFormats;
+ static {
+ final String[] formats = new String[] {
+ "MM/dd/yyyy",
+ "yyyy-MM-dd",
+ "yyyy/MM/dd",
+ "dd/MMM/yyyy",
+ "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
@@ -1244,10 +1263,10 @@ public class cgBase {
final Matcher matcherHidden = patternHidden.matcher(tableInside);
if (matcherHidden.find()) {
if (matcherHidden.groupCount() > 0) {
- cache.hidden = parseDate(matcherHidden.group(1));
+ cache.hidden = parseGcCustomDate(matcherHidden.group(1));
}
}
- } catch (Exception e) {
+ } catch (ParseException e) {
// failed to parse cache hidden date
Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse cache hidden date");
}
@@ -1258,10 +1277,10 @@ public class cgBase {
final Matcher matcherHiddenEvent = patternHiddenEvent.matcher(tableInside);
if (matcherHiddenEvent.find()) {
if (matcherHiddenEvent.groupCount() > 0) {
- cache.hidden = parseDate(matcherHiddenEvent.group(1));
+ cache.hidden = parseGcCustomDate(matcherHiddenEvent.group(1));
}
}
- } catch (Exception e) {
+ } catch (ParseException e) {
// failed to parse cache event date
Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse cache event date");
}
@@ -1295,14 +1314,17 @@ public class cgBase {
}
// cache found
- try {
- final Matcher matcherFound = patternFound.matcher(page);
- if (matcherFound.find()) {
- if (matcherFound.group() != null && matcherFound.group().length() > 0) {
- cache.found = true;
- }
+ try
+ {
+ final Matcher matcherFound = patternFound.matcher(page);
+ final Matcher matcherFoundAlternative = patternFoundAlternative.matcher(page);
+
+ if (matcherFound.find() || matcherFoundAlternative.find()) {
+ cache.found = true;
}
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
// failed to parse found
Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse found");
}
@@ -1613,7 +1635,7 @@ public class cgBase {
try
{
- logDone.date = dateInSlash.parse(matcherLog.group(5)).getTime();
+ logDone.date = parseGcCustomDate(matcherLog.group(5)).getTime();
}
catch (ParseException e)
{
@@ -1878,34 +1900,26 @@ public class cgBase {
// And BTW: You cannot even see that effect in the debugger, but must use a separate memory profiler!
}
- private static Date parseDate(String input) {
- if (input == null) {
- return null;
+ private static Date parseGcCustomDate(String input)
+ throws ParseException
+ {
+ if (input == null)
+ {
+ throw new ParseException("Input is null", 0);
}
+
input = input.trim();
- try {
- Date result;
- if (input.indexOf('/') > 0) {
- result = dateInSlash.parse(input);
- if (result != null) {
- return result;
- }
- }
- if (input.indexOf('-') > 0) {
- result = dateInDash.parse(input);
- if (result != null) {
- return result;
- }
- }
- result = dateEvIn.parse(input);
- if (result != null) {
- return result;
- }
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
+
+ for (SimpleDateFormat format : gcCustomDateFormats.values())
+ {
+ try
+ {
+ return format.parse(input);
+ }
+ catch (ParseException e) {}
+ }
+
+ throw new ParseException("No matching pattern", 0);
}
public cgRating getRating(String guid, String geocode) {