aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/GCConstants.java1
-rw-r--r--main/src/cgeo/geocaching/Settings.java26
-rw-r--r--main/src/cgeo/geocaching/cgBase.java19
-rw-r--r--main/src/cgeo/geocaching/cgeoinit.java2
4 files changed, 45 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/GCConstants.java b/main/src/cgeo/geocaching/GCConstants.java
index b54139b..976aad3 100644
--- a/main/src/cgeo/geocaching/GCConstants.java
+++ b/main/src/cgeo/geocaching/GCConstants.java
@@ -56,6 +56,7 @@ public final class GCConstants {
public static final Pattern PATTERN_LOGGEDIN2 = Pattern.compile("<strong>\\W*Hello,[^<]*<a[^>]+>([^<]+)</a>[^<]*</strong>");
public static final Pattern PATTERN_USERLOGGEDIN = Pattern.compile("<strong>Hello, <a href=\"/my/default.aspx\" title=\"View Profile for[^\"]*\" class=\"SignedInProfileLink\">(.*?)</a></strong>");
public static final Pattern PATTERN_AVATAR_IMAGE = Pattern.compile("<img src=\"(http://img.geocaching.com/user/avatar/[0-9a-f-]+\\.jpg)\"[^>]*\\salt=\"Avatar\"");
+ public static final Pattern PATTERN_MEMBER_STATUS = Pattern.compile("<p class=\"NoBottomSpacing\" id=\"memberStatus\">([^<]+)<br");
public static final Pattern PATTERN_CUSTOMDATE = Pattern.compile("<option selected=\"selected\" value=\"([ /Mdy-]+)\">");
/**
diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java
index 36a34bd..3cf9941 100644
--- a/main/src/cgeo/geocaching/Settings.java
+++ b/main/src/cgeo/geocaching/Settings.java
@@ -65,6 +65,7 @@ public final class Settings {
private static final String KEY_GCVOTE_PASSWORD = "pass-vote";
private static final String KEY_PASSWORD = "password";
private static final String KEY_USERNAME = "username";
+ private static final String KEY_MEMBER_STATUS = "memberstatus";
private static final String KEY_COORD_INPUT_FORMAT = "coordinputformat";
private static final String KEY_LOG_OFFLINE = "log_offline";
private static final String KEY_LOAD_DIRECTION_IMG = "loaddirectionimg";
@@ -180,6 +181,31 @@ public final class Settings {
});
}
+ public static boolean isPremiumMember() {
+ // Basic Member, Premium Member, ???
+ return "Premium Member".compareTo(Settings.getMemberStatus()) == 0;
+ }
+
+ public static String getMemberStatus() {
+ return sharedPrefs.getString(KEY_MEMBER_STATUS, null);
+ }
+
+ public static boolean setMemberStatus(final String memberStatus) {
+ return editSharedSettings(new PrefRunnable() {
+
+ @Override
+ public void edit(Editor edit) {
+ if (StringUtils.isBlank(memberStatus)) {
+ // erase password
+ edit.remove(KEY_MEMBER_STATUS);
+ } else {
+ // save password
+ edit.putString(KEY_MEMBER_STATUS, memberStatus);
+ }
+ }
+ });
+ }
+
public static boolean isGCvoteLogin() {
final String preUsername = sharedPrefs.getString(KEY_USERNAME, null);
final String prePassword = sharedPrefs.getString(KEY_GCVOTE_PASSWORD, null);
diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java
index 3656694..58b7695 100644
--- a/main/src/cgeo/geocaching/cgBase.java
+++ b/main/src/cgeo/geocaching/cgBase.java
@@ -360,6 +360,18 @@ public class cgBase {
}
}
+ public static StatusCode logout() {
+ HttpResponse logoutResponse = request("https://www.geocaching.com/login/default.aspx?RESET=Y&redir=http%3a%2f%2fwww.geocaching.com%2fdefault.aspx%3f", null, false, false, false);
+ String logoutData = getResponseData(logoutResponse);
+ if (logoutResponse != null && logoutResponse.getStatusLine().getStatusCode() == 503 && BaseUtils.matches(logoutData, GCConstants.PATTERN_MAINTENANCE)) {
+ return StatusCode.MAINTENANCE;
+ }
+
+ clearCookies();
+ Settings.setCookieStore(null);
+ return StatusCode.NO_ERROR;
+ }
+
public static boolean checkLogin(String page) {
if (StringUtils.isBlank(page)) {
Log.e(Settings.tag, "cgeoBase.checkLogin: No page given");
@@ -785,7 +797,6 @@ public class cgBase {
}
final cgCacheWrap caches = new cgCacheWrap();
- final cgCache cache = new cgCache();
if (page.contains("Cache is Unpublished")) {
caches.error = StatusCode.UNPUBLISHED_CACHE;
@@ -802,6 +813,7 @@ public class cgBase {
return caches;
}
+ final cgCache cache = new cgCache();
cache.setDisabled(page.contains("<li>This cache is temporarily unavailable."));
cache.setArchived(page.contains("<li>This cache has been archived,"));
@@ -1393,9 +1405,12 @@ public class cgBase {
}
}
- public static BitmapDrawable downloadAvatar(final Context context) {
+ public static BitmapDrawable downloadAvatarAndGetMemberStatus(final Context context) {
try {
final String profile = BaseUtils.replaceWhitespace(getResponseData(request("http://www.geocaching.com/my/", null, false)));
+
+ Settings.setMemberStatus(BaseUtils.getMatch(profile, GCConstants.PATTERN_MEMBER_STATUS, true, null));
+
final String avatarURL = BaseUtils.getMatch(profile, GCConstants.PATTERN_AVATAR_IMAGE, false, null);
if (null != avatarURL) {
final HtmlImage imgGetter = new HtmlImage(context, "", false, 0, false);
diff --git a/main/src/cgeo/geocaching/cgeoinit.java b/main/src/cgeo/geocaching/cgeoinit.java
index b1eb31a..2700e00 100644
--- a/main/src/cgeo/geocaching/cgeoinit.java
+++ b/main/src/cgeo/geocaching/cgeoinit.java
@@ -723,7 +723,7 @@ public class cgeoinit extends AbstractActivity {
Object payload = loginResult;
if (loginResult == StatusCode.NO_ERROR) {
cgBase.detectGcCustomDate();
- payload = cgBase.downloadAvatar(cgeoinit.this);
+ payload = cgBase.downloadAvatarAndGetMemberStatus(cgeoinit.this);
}
logInHandler.obtainMessage(0, payload).sendToTarget();
}