aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2013-09-15 18:47:17 +0200
committerSamuel Tardieu <sam@rfc1149.net>2013-09-15 18:51:33 +0200
commit40d66b9b9a14cd65f36ccd13ae962058a9d9d4ca (patch)
treefe864c74a0e721f71b78c0889ff328e7ba11c5b0 /main/src
parent4cc85b839b7f4f15a92ec1070059bbda13c03e98 (diff)
downloadcgeo-40d66b9b9a14cd65f36ccd13ae962058a9d9d4ca.zip
cgeo-40d66b9b9a14cd65f36ccd13ae962058a9d9d4ca.tar.gz
cgeo-40d66b9b9a14cd65f36ccd13ae962058a9d9d4ca.tar.bz2
Do not retry loading a page after 404 from gc.com
When a page cannot be found, geocaching.com returns with a 404. Retrying while logged in would not change anything, and we should not consider ourselves as logged as guest because of this error.
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java1
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java9
-rw-r--r--main/src/cgeo/geocaching/connector/gc/Login.java15
-rw-r--r--main/src/cgeo/geocaching/network/Network.java4
-rw-r--r--main/src/cgeo/geocaching/utils/TextUtils.java6
5 files changed, 27 insertions, 8 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 5389a36..111c865 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -152,6 +152,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
search.setError(StatusCode.COMMUNICATION_ERROR);
return search;
}
+ assert page != null;
final SearchResult searchResult = GCParser.parseCache(page, handler);
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index ce00e87..9c9e06d 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -40,6 +40,7 @@ import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -843,6 +844,7 @@ public abstract class GCParser {
* @param recaptchaReceiver
* @return
*/
+ @Nullable
private static SearchResult searchByAny(final CacheType cacheType, final boolean my, final boolean showCaptcha, final Parameters params, RecaptchaReceiver recaptchaReceiver) {
insertCacheType(params, cacheType);
@@ -854,6 +856,7 @@ public abstract class GCParser {
Log.e("GCParser.searchByAny: No data from server");
return null;
}
+ assert page != null;
final SearchResult searchResult = parseSearch(fullUri, page, showCaptcha, recaptchaReceiver);
if (searchResult == null || CollectionUtils.isEmpty(searchResult.getGeocodes())) {
@@ -940,6 +943,7 @@ public abstract class GCParser {
return null;
}
+ @Nullable
public static Trackable searchTrackable(final String geocode, final String guid, final String id) {
if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid) && StringUtils.isBlank(id)) {
Log.w("GCParser.searchTrackable: No geocode nor guid nor id given");
@@ -964,6 +968,7 @@ public abstract class GCParser {
Log.e("GCParser.searchTrackable: No data from server");
return trackable;
}
+ assert page != null;
trackable = parseTrackable(page, geocode);
if (trackable == null) {
@@ -1132,6 +1137,7 @@ public abstract class GCParser {
Log.e("GCParser.uploadLogImage: No data from server");
return new ImmutablePair<StatusCode, String>(StatusCode.UNKNOWN_ERROR, null);
}
+ assert page != null;
final String[] viewstates = Login.getViewstates(page);
@@ -1289,7 +1295,8 @@ public abstract class GCParser {
return !guidOnPage; // on watch list (=error) / not on watch list
}
- static String requestHtmlPage(final String geocode, final String guid, final String log, final String numlogs) {
+ @Nullable
+ static String requestHtmlPage(@Nullable final String geocode, @Nullable final String guid, final String log, final String numlogs) {
final Parameters params = new Parameters("decrypt", "y");
if (StringUtils.isNotBlank(geocode)) {
params.put("wp", geocode);
diff --git a/main/src/cgeo/geocaching/connector/gc/Login.java b/main/src/cgeo/geocaching/connector/gc/Login.java
index ad07424..beb49f1 100644
--- a/main/src/cgeo/geocaching/connector/gc/Login.java
+++ b/main/src/cgeo/geocaching/connector/gc/Login.java
@@ -13,10 +13,11 @@ import cgeo.geocaching.utils.MatcherWrapper;
import cgeo.geocaching.utils.TextUtils;
import ch.boye.httpclientandroidlib.HttpResponse;
-
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import android.graphics.drawable.BitmapDrawable;
@@ -213,11 +214,12 @@ public abstract class Login {
* @param page
* @return <code>true</code> if user is logged in, <code>false</code> otherwise
*/
- public static boolean getLoginStatus(final String page) {
+ public static boolean getLoginStatus(@Nullable final String page) {
if (StringUtils.isBlank(page)) {
Log.e("Login.checkLogin: No page given");
return false;
}
+ assert page != null;
setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_ok));
@@ -475,10 +477,13 @@ public abstract class Login {
* @param params
* @return
*/
- public static String getRequestLogged(final String uri, final Parameters params) {
- final String data = Network.getResponseData(Network.getRequest(uri, params), canRemoveWhitespace(uri));
+ @Nullable
+ public static String getRequestLogged(@NonNull final String uri, @Nullable final Parameters params) {
+ final HttpResponse response = Network.getRequest(uri, params);
+ final String data = Network.getResponseData(response, canRemoveWhitespace(uri));
- if (getLoginStatus(data)) {
+ // A page not found will not be found if the user logs in either
+ if (Network.isPageNotFound(response) || getLoginStatus(data)) {
return data;
}
diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java
index 873cfc9..1810216 100644
--- a/main/src/cgeo/geocaching/network/Network.java
+++ b/main/src/cgeo/geocaching/network/Network.java
@@ -399,6 +399,10 @@ public abstract class Network {
return response != null && response.getStatusLine().getStatusCode() == 200;
}
+ static public boolean isPageNotFound(@Nullable final HttpResponse response) {
+ return response != null && response.getStatusLine().getStatusCode() == 404;
+ }
+
/**
* Get the result of a GET HTTP request returning a JSON body.
*
diff --git a/main/src/cgeo/geocaching/utils/TextUtils.java b/main/src/cgeo/geocaching/utils/TextUtils.java
index c9d4958..302a65d 100644
--- a/main/src/cgeo/geocaching/utils/TextUtils.java
+++ b/main/src/cgeo/geocaching/utils/TextUtils.java
@@ -3,6 +3,8 @@
*/
package cgeo.geocaching.utils;
+import org.eclipse.jdt.annotation.Nullable;
+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -34,7 +36,7 @@ public final class TextUtils {
* Find the last occurring value
* @return defaultValue or the n-th group if the pattern matches (trimmed if wanted)
*/
- public static String getMatch(final String data, final Pattern p, final boolean trim, final int group, final String defaultValue, final boolean last) {
+ public static String getMatch(@Nullable final String data, final Pattern p, final boolean trim, final int group, final String defaultValue, final boolean last) {
if (data != null) {
String result = null;
@@ -87,7 +89,7 @@ public final class TextUtils {
* Value to return if the pattern is not found
* @return defaultValue or the first group if the pattern matches (trimmed)
*/
- public static String getMatch(final String data, final Pattern p, final String defaultValue) {
+ public static String getMatch(@Nullable final String data, final Pattern p, final String defaultValue) {
return TextUtils.getMatch(data, p, true, 1, defaultValue, false);
}