aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-10-22 20:44:11 +0200
committerSamuel Tardieu <sam@rfc1149.net>2014-10-22 20:44:11 +0200
commitb41ca6e3195dcf60a842632b37b90059b7cd9960 (patch)
treeb14bae3aaf84664d9453753abb4a259bedc8797d
parentee7f4ea1ee068383572131f98c61571ffd304aa4 (diff)
parent1da80caa52fbb6a66db92c93298cf34390ac3676 (diff)
downloadcgeo-b41ca6e3195dcf60a842632b37b90059b7cd9960.zip
cgeo-b41ca6e3195dcf60a842632b37b90059b7cd9960.tar.gz
cgeo-b41ca6e3195dcf60a842632b37b90059b7cd9960.tar.bz2
Merge branch 'issue-4416' into upstream
Conflicts: main/src/cgeo/geocaching/connector/gc/GCLogin.java
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java4
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCLogin.java80
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java5
-rw-r--r--main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java1
-rw-r--r--tests/res/raw/own_cache.htm2
-rw-r--r--tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java2
-rw-r--r--tests/src/cgeo/geocaching/test/mock/GC2CJPF.java2
-rw-r--r--tests/src/cgeo/geocaching/test/mock/GC2JVEH.java2
-rw-r--r--tests/src/cgeo/geocaching/test/mock/MockedCache.java6
9 files changed, 26 insertions, 78 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 4512979..6a96d04 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -327,10 +327,6 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
// login
final StatusCode status = GCLogin.getInstance().login();
- if (status == StatusCode.NO_ERROR) {
- GCLogin.detectGcCustomDate();
- }
-
if (CgeoApplication.getInstance().showLoginToast && handler != null) {
handler.sendMessage(handler.obtainMessage(0, status));
CgeoApplication.getInstance().showLoginToast = false;
diff --git a/main/src/cgeo/geocaching/connector/gc/GCLogin.java b/main/src/cgeo/geocaching/connector/gc/GCLogin.java
index b2122d4..9eb54ad 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCLogin.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCLogin.java
@@ -27,43 +27,15 @@ import android.graphics.drawable.Drawable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
+import java.util.GregorianCalendar;
public class GCLogin extends AbstractLogin {
- private static final String DEFAULT_CUSTOM_DATE_FORMAT = "MM/dd/yyyy";
-
private final static String ENGLISH = "<a href=\"#\">English &#9660;</a>";
- private final static Map<String, SimpleDateFormat> GC_CUSTOM_DATE_FORMATS;
public static final String LANGUAGE_CHANGE_URI = "http://www.geocaching.com/my/souvenirs.aspx";
- static {
- final String[] formats = new String[] {
- DEFAULT_CUSTOM_DATE_FORMAT,
- "yyyy-MM-dd",
- "yyyy/MM/dd",
- "dd.MM.yyyy",
- "dd/MMM/yyyy",
- "dd.MMM.yyyy",
- "MMM/dd/yyyy",
- "dd MMM yy",
- "dd/MM/yyyy"
- };
-
- final Map<String, SimpleDateFormat> map = new HashMap<>();
-
- for (final String format : formats) {
- map.put(format, new SimpleDateFormat(format, Locale.ENGLISH));
- }
-
- GC_CUSTOM_DATE_FORMATS = Collections.unmodifiableMap(map);
- }
-
private GCLogin() {
// singleton
}
@@ -76,6 +48,11 @@ public class GCLogin extends AbstractLogin {
private static final GCLogin INSTANCE = new GCLogin();
}
+ private static StatusCode resetGcCustomDate(final StatusCode statusCode) {
+ Settings.setGcCustomDate("MM/dd/yyyy");
+ return statusCode;
+ }
+
@Override
protected StatusCode login(boolean retry) {
final ImmutablePair<String, String> credentials = Settings.getGcCredentials();
@@ -85,7 +62,7 @@ public class GCLogin extends AbstractLogin {
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
clearLoginInfo();
Log.e("Login.login: No login information stored");
- return StatusCode.NO_LOGIN_INFO_STORED;
+ return resetGcCustomDate(StatusCode.NO_LOGIN_INFO_STORED);
}
setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_working));
@@ -105,6 +82,7 @@ public class GCLogin extends AbstractLogin {
if (switchToEnglish(loginData) && retry) {
return login(false);
}
+ detectGcCustomDate();
return StatusCode.NO_ERROR; // logged in
}
@@ -141,17 +119,18 @@ public class GCLogin extends AbstractLogin {
}
Log.i("Successfully logged in Geocaching.com as " + username + " (" + Settings.getGCMemberStatus() + ')');
Settings.setCookieStore(Cookies.dumpCookieStore());
+ detectGcCustomDate();
return StatusCode.NO_ERROR; // logged in
}
if (loginData.contains("Your username/password combination does not match.")) {
Log.i("Failed to log in Geocaching.com as " + username + " because of wrong username/password");
- return StatusCode.WRONG_LOGIN_DATA; // wrong login
+ return resetGcCustomDate(StatusCode.WRONG_LOGIN_DATA); // wrong login
}
if (loginData.contains("You must validate your account before you can log in.")) {
Log.i("Failed to log in Geocaching.com as " + username + " because account needs to be validated first");
- return StatusCode.UNVALIDATED_ACCOUNT;
+ return resetGcCustomDate(StatusCode.UNVALIDATED_ACCOUNT);
}
Log.i("Failed to log in Geocaching.com as " + username + " for some unknown reason");
@@ -160,7 +139,7 @@ public class GCLogin extends AbstractLogin {
return login(false);
}
- return StatusCode.UNKNOWN_ERROR; // can't login
+ return resetGcCustomDate(StatusCode.UNKNOWN_ERROR); // can't login
}
public StatusCode logout() {
@@ -287,9 +266,9 @@ public class GCLogin extends AbstractLogin {
/**
* Detect user date settings on geocaching.com
*/
- public static void detectGcCustomDate() {
+ private static void detectGcCustomDate() {
- final String result = Network.getResponseData(Network.getRequest("http://www.geocaching.com/account/ManagePreferences.aspx"));
+ final String result = Network.getResponseData(Network.getRequest("https://www.geocaching.com/myaccount/settings/preferences"));
if (null == result) {
Log.w("Login.detectGcCustomDate: result is null");
@@ -303,40 +282,15 @@ public class GCLogin extends AbstractLogin {
}
public static Date parseGcCustomDate(final String input, final String format) throws ParseException {
- if (StringUtils.isBlank(input)) {
- throw new ParseException("Input is null", 0);
- }
-
- final String trimmed = input.trim();
-
- if (GC_CUSTOM_DATE_FORMATS.containsKey(format)) {
- try {
- return GC_CUSTOM_DATE_FORMATS.get(format).parse(trimmed);
- } catch (final ParseException ignored) {
- }
- }
-
- for (final SimpleDateFormat sdf : GC_CUSTOM_DATE_FORMATS.values()) {
- try {
- return sdf.parse(trimmed);
- } catch (final ParseException ignored) {
- }
- }
-
- throw new ParseException("No matching pattern", 0);
+ return new SimpleDateFormat(format).parse(input.trim());
}
public static Date parseGcCustomDate(final String input) throws ParseException {
return parseGcCustomDate(input, Settings.getGcCustomDate());
}
- public static SimpleDateFormat getCustomGcDateFormat() {
- final String format = Settings.getGcCustomDate();
- if (GC_CUSTOM_DATE_FORMATS.containsKey(format)) {
- return GC_CUSTOM_DATE_FORMATS.get(format);
- }
-
- return GC_CUSTOM_DATE_FORMATS.get(DEFAULT_CUSTOM_DATE_FORMAT);
+ public static String formatGcCustomDate(int year, int month, int day) {
+ return new SimpleDateFormat(Settings.getGcCustomDate()).format(new GregorianCalendar(year, month - 1, day).getTime());
}
/**
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index a64fbfc..49ed98f 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -70,7 +70,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.EnumSet;
-import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -1064,7 +1063,7 @@ public abstract class GCParser {
"__EVENTARGUMENT", "",
"__LASTFOCUS", "",
"ctl00$ContentBody$LogBookPanel1$ddLogType", Integer.toString(logType.id),
- "ctl00$ContentBody$LogBookPanel1$uxDateVisited", GCLogin.getCustomGcDateFormat().format(new GregorianCalendar(year, month - 1, day).getTime()),
+ "ctl00$ContentBody$LogBookPanel1$uxDateVisited", GCLogin.formatGcCustomDate(year, month, day),
"ctl00$ContentBody$LogBookPanel1$uxDateVisited$Month", Integer.toString(month),
"ctl00$ContentBody$LogBookPanel1$uxDateVisited$Day", Integer.toString(day),
"ctl00$ContentBody$LogBookPanel1$uxDateVisited$Year", Integer.toString(year),
@@ -1260,7 +1259,7 @@ public abstract class GCParser {
params.put("ctl00$ContentBody$LogBookPanel1$uxDateVisited", "");
} else {
params.put("ctl00$ContentBody$LogBookPanel1$DateTimeLogged", Integer.toString(month) + "/" + Integer.toString(day) + "/" + Integer.toString(year));
- params.put("ctl00$ContentBody$LogBookPanel1$uxDateVisited", GCLogin.getCustomGcDateFormat().format(new GregorianCalendar(year, month - 1, day).getTime()));
+ params.put("ctl00$ContentBody$LogBookPanel1$uxDateVisited", GCLogin.formatGcCustomDate(year, month, day));
}
params.put(
"ctl00$ContentBody$LogBookPanel1$DateTimeLogged$Day", Integer.toString(day),
diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
index 0269f3b..c4b243e 100644
--- a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
+++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
@@ -31,7 +31,6 @@ public class CheckGcCredentialsPreference extends AbstractCheckCredentialsPrefer
final StatusCode loginResult = GCLogin.getInstance().login();
switch (loginResult) {
case NO_ERROR:
- GCLogin.detectGcCustomDate();
return ImmutablePair.of(StatusCode.NO_ERROR, GCLogin.getInstance().downloadAvatarAndGetMemberStatus());
default:
return ImmutablePair.of(loginResult, null);
diff --git a/tests/res/raw/own_cache.htm b/tests/res/raw/own_cache.htm
index 4d26e2e..c222bcd 100644
--- a/tests/res/raw/own_cache.htm
+++ b/tests/res/raw/own_cache.htm
@@ -424,7 +424,7 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet
<div id="ctl00_ContentBody_mcd2">
Hidden
:
- 31/Mar/2012
+ 2013-03-31
</div>
<div>
diff --git a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java
index 09139f2..ddd2310 100644
--- a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java
+++ b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java
@@ -86,7 +86,7 @@ public class GC1ZXX2 extends MockedCache {
@Override
public Date getHiddenDate() {
try {
- return GCLogin.parseGcCustomDate("16/10/2009", getDateFormat());
+ return GCLogin.parseGcCustomDate("2009-10-16", getDateFormat());
} catch (ParseException e) {
// intentionally left blank
}
diff --git a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java
index c125422..781810e 100644
--- a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java
+++ b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java
@@ -121,7 +121,7 @@ public class GC2CJPF extends MockedCache {
@Override
public Date getHiddenDate() {
try {
- return GCLogin.parseGcCustomDate("31/07/2010", getDateFormat());
+ return GCLogin.parseGcCustomDate("2010-07-31", getDateFormat());
} catch (ParseException e) {
// intentionally left blank
}
diff --git a/tests/src/cgeo/geocaching/test/mock/GC2JVEH.java b/tests/src/cgeo/geocaching/test/mock/GC2JVEH.java
index a1337cd..be27a2e 100644
--- a/tests/src/cgeo/geocaching/test/mock/GC2JVEH.java
+++ b/tests/src/cgeo/geocaching/test/mock/GC2JVEH.java
@@ -89,7 +89,7 @@ public class GC2JVEH extends MockedCache {
@Override
public Date getHiddenDate() {
try {
- return GCLogin.parseGcCustomDate("28/11/2010", getDateFormat());
+ return GCLogin.parseGcCustomDate("2010-11-28", getDateFormat());
} catch (ParseException e) {
// intentionally left blank
}
diff --git a/tests/src/cgeo/geocaching/test/mock/MockedCache.java b/tests/src/cgeo/geocaching/test/mock/MockedCache.java
index cd482f8..0ef6488 100644
--- a/tests/src/cgeo/geocaching/test/mock/MockedCache.java
+++ b/tests/src/cgeo/geocaching/test/mock/MockedCache.java
@@ -12,14 +12,14 @@ import cgeo.geocaching.utils.TextUtils;
import org.apache.commons.lang3.StringUtils;
import org.mapsforge.core.IOUtils;
+import junit.framework.Assert;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
-import junit.framework.Assert;
-
public abstract class MockedCache implements ICache {
final protected Geopoint coords;
@@ -44,7 +44,7 @@ public abstract class MockedCache implements ICache {
}
public static String getDateFormat() {
- return "dd/MM/yyyy";
+ return "yyyy-MM-dd";
}
/*