From fa50bde7f65d53ee842dd061e18ae49cfbab8ed7 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 22 Oct 2014 19:51:58 +0200 Subject: Use uniform date format in tests Part of work on #4416. --- tests/res/raw/own_cache.htm | 2 +- tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java | 2 +- tests/src/cgeo/geocaching/test/mock/GC2CJPF.java | 2 +- tests/src/cgeo/geocaching/test/mock/GC2JVEH.java | 2 +- tests/src/cgeo/geocaching/test/mock/MockedCache.java | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) 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
Hidden : - 31/Mar/2012 + 2013-03-31
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 3fe105d..817f285 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"; } /* -- cgit v1.1 From c8cdc987c20ba7ade2f3b005fbc86b33f232a4c1 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 22 Oct 2014 19:52:22 +0200 Subject: Reset default date format on login error When unlogged, the default format is MM/dd/yyyy. Part of work on #4416. --- main/src/cgeo/geocaching/connector/gc/GCLogin.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/main/src/cgeo/geocaching/connector/gc/GCLogin.java b/main/src/cgeo/geocaching/connector/gc/GCLogin.java index 9f430c0..c0a0ad8 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCLogin.java +++ b/main/src/cgeo/geocaching/connector/gc/GCLogin.java @@ -76,6 +76,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 credentials = Settings.getGcCredentials(); @@ -85,7 +90,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)); @@ -146,12 +151,12 @@ public class GCLogin extends AbstractLogin { 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 +165,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() { -- cgit v1.1 From 9ee559cba58e433bf5e5cdaebcf1e34697241f70 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Wed, 22 Oct 2014 20:03:06 +0200 Subject: Get GC custom date on every succesful login Part of work on #4416. --- main/src/cgeo/geocaching/connector/gc/GCConnector.java | 4 ---- main/src/cgeo/geocaching/connector/gc/GCLogin.java | 4 +++- main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 3b7c31e..226c8bb 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 c0a0ad8..58e5c49 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCLogin.java +++ b/main/src/cgeo/geocaching/connector/gc/GCLogin.java @@ -110,6 +110,7 @@ public class GCLogin extends AbstractLogin { if (switchToEnglish(loginData) && retry) { return login(false); } + detectGcCustomDate(); return StatusCode.NO_ERROR; // logged in } @@ -146,6 +147,7 @@ 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 } @@ -289,7 +291,7 @@ 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")); 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); -- cgit v1.1 From 1da80caa52fbb6a66db92c93298cf34390ac3676 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Tue, 14 Oct 2014 22:57:41 +0200 Subject: fix #4416: new preferences page on geocaching.com --- main/src/cgeo/geocaching/connector/gc/GCLogin.java | 63 ++-------------------- .../src/cgeo/geocaching/connector/gc/GCParser.java | 5 +- 2 files changed, 7 insertions(+), 61 deletions(-) diff --git a/main/src/cgeo/geocaching/connector/gc/GCLogin.java b/main/src/cgeo/geocaching/connector/gc/GCLogin.java index 58e5c49..d16a3cc 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 = "English ▼"; - private final static Map 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 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 } @@ -293,7 +265,7 @@ public class GCLogin extends AbstractLogin { */ 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"); @@ -307,40 +279,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 e) { - } - } - - for (final SimpleDateFormat sdf : GC_CUSTOM_DATE_FORMATS.values()) { - try { - return sdf.parse(trimmed); - } catch (final ParseException e) { - } - } - - 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 c771049..7e98b40 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -66,7 +66,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; @@ -1061,7 +1060,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), @@ -1257,7 +1256,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), -- cgit v1.1