aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2011-11-08 21:03:27 +0100
committerSamuel Tardieu <sam@rfc1149.net>2011-11-08 21:04:49 +0100
commite09a82a8e34d096b6dc7ce7d0f921d6ea8959116 (patch)
treee2639637923b20cdc6c1c2ae1c2ca2db903e7750 /main/src
parent145858fe97b7e7cf713789ff5c7d96a2c811fd4a (diff)
downloadcgeo-e09a82a8e34d096b6dc7ce7d0f921d6ea8959116.zip
cgeo-e09a82a8e34d096b6dc7ce7d0f921d6ea8959116.tar.gz
cgeo-e09a82a8e34d096b6dc7ce7d0f921d6ea8959116.tar.bz2
Display a better message when gc.com is in maintenance mode
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/cgBase.java18
-rw-r--r--main/src/cgeo/geocaching/cgeo.java2
-rw-r--r--main/src/cgeo/geocaching/enumerations/StatusCode.java1
3 files changed, 15 insertions, 6 deletions
diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java
index d569cb1..e40493b 100644
--- a/main/src/cgeo/geocaching/cgBase.java
+++ b/main/src/cgeo/geocaching/cgBase.java
@@ -133,6 +133,7 @@ public class cgBase {
private static final Pattern patternViewstateFieldCount = Pattern.compile("id=\"__VIEWSTATEFIELDCOUNT\"[^(value)]+value=\"(\\d+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private static final Pattern patternViewstates = Pattern.compile("id=\"__VIEWSTATE(\\d*)\"[^(value)]+value=\"([^\"]+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private static final Pattern patternUserToken = Pattern.compile("userToken\\s*=\\s*'([^']+)'");
+ private static final Pattern patternMaintenance = Pattern.compile("Geocaching.com is temporarily down for maintenance");
public static final float miles2km = 1.609344f;
public static final float feet2km = 0.0003048f;
public static final float yards2km = 0.0009144f;
@@ -446,7 +447,10 @@ public class cgBase {
}
HttpResponse loginResponse = request("https://www.geocaching.com/login/default.aspx", null, false, false, false);
- String loginData = getResponseData(loginResponse);
+ String loginData = getResponseDataOnError(loginResponse);
+ if (loginResponse.getStatusLine().getStatusCode() == 503 && patternMaintenance.matcher(loginData).find()) {
+ return StatusCode.MAINTENANCE;
+ }
if (StringUtils.isBlank(loginData)) {
Log.e(Settings.tag, "cgeoBase.login: Failed to retrieve login page (1st)");
@@ -2734,10 +2738,7 @@ public class cgBase {
return getViewstates(getResponseData(response));
}
- static public String getResponseData(final HttpResponse response) {
- if (!isSuccess(response)) {
- return null;
- }
+ static public String getResponseDataOnError(final HttpResponse response) {
try {
return BaseUtils.replaceWhitespace(EntityUtils.toString(response.getEntity(), HTTP.UTF_8));
} catch (Exception e) {
@@ -2746,6 +2747,13 @@ public class cgBase {
}
}
+ static public String getResponseData(final HttpResponse response) {
+ if (!isSuccess(response)) {
+ return null;
+ }
+ return getResponseDataOnError(response);
+ }
+
public static String postRequestLogged(final String uri) {
final String data = getResponseData(postRequest(uri, null));
if (!checkLogin(data)) {
diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/cgeo.java
index afa789a..02c8571 100644
--- a/main/src/cgeo/geocaching/cgeo.java
+++ b/main/src/cgeo/geocaching/cgeo.java
@@ -136,7 +136,7 @@ public class cgeo extends AbstractActivity {
final StatusCode reason = (StatusCode) msg.obj;
if (reason != null && reason != StatusCode.NO_ERROR) { //LoginFailed
- showToast(res.getString(R.string.err_login_failed_toast));
+ showToast(res.getString(reason == StatusCode.MAINTENANCE ? reason.getErrorString() : R.string.err_login_failed_toast));
}
} catch (Exception e) {
Log.w(Settings.tag, "cgeo.fisrtLoginHander: " + e.toString());
diff --git a/main/src/cgeo/geocaching/enumerations/StatusCode.java b/main/src/cgeo/geocaching/enumerations/StatusCode.java
index 239d9bc..8c29ff6 100644
--- a/main/src/cgeo/geocaching/enumerations/StatusCode.java
+++ b/main/src/cgeo/geocaching/enumerations/StatusCode.java
@@ -19,6 +19,7 @@ public enum StatusCode {
UNAPPROVED_LICENSE(-7, R.string.err_license),
UNPUBLISHED_CACHE(-8, R.string.err_unpublished),
PREMIUM_ONLY(-9, R.string.err_premium_only),
+ MAINTENANCE(-10, R.string.err_maintenance),
LOG_POST_ERROR(1000, R.string.err_log_post_failed),
NO_LOG_TEXT(1001, R.string.warn_log_text_fill),
NO_DATA_FROM_SERVER(1002, R.string.err_log_failed_server);