diff options
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/GCConstants.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/Settings.java | 26 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgBase.java | 19 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeoinit.java | 2 |
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(); } |
