diff options
Diffstat (limited to 'main/src/cgeo/geocaching/connector/oc')
6 files changed, 161 insertions, 127 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java index 4c6db97..5ca2d28 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java @@ -2,13 +2,14 @@ package cgeo.geocaching.connector.oc; import cgeo.geocaching.Geocache; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.Settings; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.ILoggingManager; +import cgeo.geocaching.connector.capability.ILogin; import cgeo.geocaching.connector.capability.ISearchByCenter; import cgeo.geocaching.connector.capability.ISearchByViewPort; -import cgeo.geocaching.connector.oc.OkapiClient.UserInfo; +import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.utils.CryptUtils; @@ -16,11 +17,13 @@ import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; import android.app.Activity; +import android.content.Context; +import android.os.Handler; -public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort { +public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin { private String cS; - private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, false); + private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_RETRIEVED); public OCApiLiveConnector(String name, String host, String prefix, int cKResId, int cSResId, ApiSupport apiSupport) { super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), apiSupport); @@ -104,16 +107,33 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente return getSupportedAuthLevel() == OAuthLevel.Level3; } - public boolean retrieveUserInfo() { - userInfo = OkapiClient.getUserInfo(this); - return userInfo.isRetrieveSuccessful(); + @Override + public boolean login(Handler handler, Context fromActivity) { + if (supportsPersonalization()) { + userInfo = OkapiClient.getUserInfo(this); + } else { + userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_SUPPORTED); + } + return userInfo.getStatus() == UserInfoStatus.SUCCESSFUL; } - public Object getUserName() { + @Override + public String getUserName() { return userInfo.getName(); } + @Override public int getCachesFound() { return userInfo.getFinds(); } + + @Override + public String getLoginStatusString() { + return cgeoapplication.getInstance().getString(userInfo.getStatus().resId); + } + + @Override + public boolean isLoggedIn() { + return userInfo.getStatus() == UserInfoStatus.SUCCESSFUL; + } } diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java index 779c1c5..08d796e 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java @@ -1,7 +1,7 @@ package cgeo.geocaching.connector.oc; import cgeo.geocaching.R; -import cgeo.geocaching.Settings; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.network.OAuthAuthorizationActivity; @@ -9,8 +9,6 @@ import org.apache.commons.lang3.tuple.ImmutablePair; public class OCAuthorizationActivity extends OAuthAuthorizationActivity { - private final int siteResId = R.string.auth_ocde; - public OCAuthorizationActivity() { super("www.opencaching.de", "/okapi/services/oauth/request_token", @@ -38,7 +36,7 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity { @Override protected String getAuthTitle() { - return res.getString(siteResId); + return res.getString(R.string.auth_ocde); } @Override diff --git a/main/src/cgeo/geocaching/connector/oc/OCConnector.java b/main/src/cgeo/geocaching/connector/oc/OCConnector.java index 01738c0..29cdd10 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCConnector.java @@ -12,7 +12,7 @@ public class OCConnector extends AbstractConnector { private final String host; private final String name; private final Pattern codePattern; - private static final Pattern gpxZipFilePattern = Pattern.compile("oc[a-z]{2,3}\\d{5,}\\.zip", Pattern.CASE_INSENSITIVE); + private static final Pattern GPX_ZIP_FILE_PATTERN = Pattern.compile("oc[a-z]{2,3}\\d{5,}\\.zip", Pattern.CASE_INSENSITIVE); public OCConnector(final String name, final String host, final String prefix) { this.name = name; @@ -45,7 +45,7 @@ public class OCConnector extends AbstractConnector { @Override public boolean isZippedGPXFile(String fileName) { - return gpxZipFilePattern.matcher(fileName).matches(); + return GPX_ZIP_FILE_PATTERN.matcher(fileName).matches(); } @Override diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java index 3c99bc9..6959adf 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java @@ -4,7 +4,6 @@ import cgeo.geocaching.Geocache; import cgeo.geocaching.Image; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; -import cgeo.geocaching.Settings; import cgeo.geocaching.Waypoint; import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; @@ -14,6 +13,7 @@ import cgeo.geocaching.connector.LogResult; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.oc.OCApiConnector.ApiSupport; import cgeo.geocaching.connector.oc.OCApiConnector.OAuthLevel; +import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus; import cgeo.geocaching.enumerations.CacheAttribute; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; @@ -27,6 +27,7 @@ import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.OAuth; import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; @@ -50,16 +51,16 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; -final public class OkapiClient { +final class OkapiClient { private static final char SEPARATOR = '|'; private static final String SEPARATOR_STRING = Character.toString(SEPARATOR); - private static final SimpleDateFormat logDateFormat; - + private static final SimpleDateFormat LOG_DATE_FORMAT; static { - logDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", Locale.US); - logDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + LOG_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", Locale.US); + LOG_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); } + private static final SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()); private static final String CACHE_ATTRNAMES = "attrnames"; private static final String WPT_LOCATION = "location"; @@ -93,6 +94,8 @@ final public class OkapiClient { private static final String CACHE_LOCATION = "location"; private static final String CACHE_NAME = "name"; private static final String CACHE_CODE = "code"; + private static final String CACHE_REQ_PASSWORD = "req_passwd"; + private static final String CACHE_MY_NOTES = "my_notes"; private static final String LOG_TYPE = "type"; private static final String LOG_COMMENT = "comment"; @@ -108,9 +111,9 @@ final public class OkapiClient { // Additional: additional fields for full cache (L3 - only for level 3 auth, current - only for connectors with current api) private static final String SERVICE_CACHE_CORE_FIELDS = "code|name|location|type|status|difficulty|terrain|size"; private static final String SERVICE_CACHE_CORE_L3_FIELDS = "is_found"; - private static final String SERVICE_CACHE_ADDITIONAL_FIELDS = "owner|founds|notfounds|rating|rating_votes|recommendations|description|hint|images|latest_logs|date_hidden|alt_wpts|attrnames"; + private static final String SERVICE_CACHE_ADDITIONAL_FIELDS = "owner|founds|notfounds|rating|rating_votes|recommendations|description|hint|images|latest_logs|date_hidden|alt_wpts|attrnames|req_passwd"; private static final String SERVICE_CACHE_ADDITIONAL_CURRENT_FIELDS = "gc_code|attribution_note"; - private static final String SERVICE_CACHE_ADDITIONAL_L3_FIELDS = "is_watched"; + private static final String SERVICE_CACHE_ADDITIONAL_L3_FIELDS = "is_watched|my_notes"; private static final String METHOD_SEARCH_NEAREST = "services/caches/search/nearest"; private static final String METHOD_SEARCH_BBOX = "services/caches/search/bbox"; @@ -118,12 +121,12 @@ final public class OkapiClient { public static Geocache getCache(final String geoCode) { final Parameters params = new Parameters("cache_code", geoCode); - IConnector connector = ConnectorFactory.getConnector(geoCode); + final IConnector connector = ConnectorFactory.getConnector(geoCode); if (!(connector instanceof OCApiConnector)) { return null; } - OCApiConnector ocapiConn = (OCApiConnector) connector; + final OCApiConnector ocapiConn = (OCApiConnector) connector; params.add("fields", getFullFields(ocapiConn)); params.add("attribution_append", "none"); @@ -137,17 +140,19 @@ final public class OkapiClient { return parseCache(data); } - public static List<Geocache> getCachesAround(final Geopoint center, OCApiConnector connector) { - String centerString = GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, center) + SEPARATOR + GeopointFormatter.format(GeopointFormatter.Format.LON_DECDEGREE_RAW, center); + public static List<Geocache> getCachesAround(final Geopoint center, final OCApiConnector connector) { + final String centerString = GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, center) + SEPARATOR + GeopointFormatter.format(GeopointFormatter.Format.LON_DECDEGREE_RAW, center); final Parameters params = new Parameters("search_method", METHOD_SEARCH_NEAREST); final Map<String, String> valueMap = new LinkedHashMap<String, String>(); valueMap.put("center", centerString); valueMap.put("limit", "20"); - addFilterParams(valueMap, connector); + return requestCaches(connector, params, valueMap); + } + private static List<Geocache> requestCaches(final OCApiConnector connector, final Parameters params, final Map<String, String> valueMap) { + addFilterParams(valueMap, connector); params.add("search_params", new JSONObject(valueMap).toString()); - addRetrieveParams(params, connector); final JSONObject data = request(connector, OkapiService.SERVICE_SEARCH_AND_RETRIEVE, params); @@ -160,13 +165,13 @@ final public class OkapiClient { } // Assumes level 3 OAuth - public static List<Geocache> getCachesBBox(final Viewport viewport, OCApiConnector connector) { + public static List<Geocache> getCachesBBox(final Viewport viewport, final OCApiConnector connector) { if (viewport.getLatitudeSpan() == 0 || viewport.getLongitudeSpan() == 0) { return Collections.emptyList(); } - String bboxString = GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, viewport.bottomLeft) + final String bboxString = GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, viewport.bottomLeft) + SEPARATOR + GeopointFormatter.format(GeopointFormatter.Format.LON_DECDEGREE_RAW, viewport.bottomLeft) + SEPARATOR + GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, viewport.topRight) + SEPARATOR + GeopointFormatter.format(GeopointFormatter.Format.LON_DECDEGREE_RAW, viewport.topRight); @@ -174,22 +179,10 @@ final public class OkapiClient { final Map<String, String> valueMap = new LinkedHashMap<String, String>(); valueMap.put("bbox", bboxString); - addFilterParams(valueMap, connector); - - params.add("search_params", new JSONObject(valueMap).toString()); - - addRetrieveParams(params, connector); - - final JSONObject data = request(connector, OkapiService.SERVICE_SEARCH_AND_RETRIEVE, params); - - if (data == null) { - return Collections.emptyList(); - } - - return parseCaches(data); + return requestCaches(connector, params, valueMap); } - public static boolean setWatchState(final Geocache cache, final boolean watched, OCApiConnector connector) { + public static boolean setWatchState(final Geocache cache, final boolean watched, final OCApiConnector connector) { final Parameters params = new Parameters("cache_code", cache.getGeocode()); params.add("watched", watched ? "true" : "false"); @@ -204,15 +197,18 @@ final public class OkapiClient { return true; } - public static LogResult postLog(final Geocache cache, LogType logType, Calendar date, String log, OCApiConnector connector) { + public static LogResult postLog(final Geocache cache, final LogType logType, final Calendar date, final String log, final String logPassword, final OCApiConnector connector) { final Parameters params = new Parameters("cache_code", cache.getGeocode()); params.add("logtype", logType.oc_type); params.add("comment", log); params.add("comment_format", "plaintext"); - params.add("when", logDateFormat.format(date.getTime())); + params.add("when", LOG_DATE_FORMAT.format(date.getTime())); if (logType.equals(LogType.NEEDS_MAINTENANCE)) { params.add("needs_maintenance", "true"); } + if (logPassword != null) { + params.add("password", logPassword); + } final JSONObject data = request(connector, OkapiService.SERVICE_SUBMIT_LOG, params); @@ -226,7 +222,7 @@ final public class OkapiClient { } return new LogResult(StatusCode.LOG_POST_ERROR, ""); - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.postLog", e); } return new LogResult(StatusCode.LOG_POST_ERROR, ""); @@ -243,19 +239,20 @@ final public class OkapiClient { // Get and iterate result list final JSONObject cachesResponse = response.getJSONObject("results"); if (cachesResponse != null) { - List<Geocache> caches = new ArrayList<Geocache>(cachesResponse.length()); + final List<Geocache> caches = new ArrayList<Geocache>(cachesResponse.length()); @SuppressWarnings("unchecked") + final Iterator<String> keys = cachesResponse.keys(); while (keys.hasNext()) { - String key = keys.next(); - Geocache cache = parseSmallCache(cachesResponse.getJSONObject(key)); + final String key = keys.next(); + final Geocache cache = parseSmallCache(cachesResponse.getJSONObject(key)); if (cache != null) { caches.add(cache); } } return caches; } - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.parseCachesResult", e); } return Collections.emptyList(); @@ -269,7 +266,7 @@ final public class OkapiClient { parseCoreCache(response, cache); cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.parseSmallCache", e); } return cache; @@ -297,9 +294,9 @@ final public class OkapiClient { cache.setFavoritePoints(response.getInt(CACHE_RECOMMENDATIONS)); // not used: req_password // Prepend gc-link to description if available - StringBuilder description = new StringBuilder(500); + final StringBuilder description = new StringBuilder(500); if (!response.isNull("gc_code")) { - String gccode = response.getString("gc_code"); + final String gccode = response.getString("gc_code"); description.append(cgeoapplication.getInstance().getResources() .getString(R.string.cache_listed_on, GCConnector.getInstance().getName())) .append(": <a href=\"http://coord.info/") @@ -318,7 +315,7 @@ final public class OkapiClient { final JSONArray images = response.getJSONArray(CACHE_IMAGES); if (images != null) { for (int i = 0; i < images.length(); i++) { - JSONObject imageResponse = images.getJSONObject(i); + final JSONObject imageResponse = images.getJSONObject(i); if (imageResponse.getBoolean(CACHE_IMAGE_IS_SPOILER)) { final String title = imageResponse.getString(CACHE_IMAGE_CAPTION); final String url = absoluteUrl(imageResponse.getString(CACHE_IMAGE_URL), cache.getGeocode()); @@ -336,11 +333,15 @@ final public class OkapiClient { if (!response.isNull(CACHE_IS_WATCHED)) { cache.setOnWatchlist(response.getBoolean(CACHE_IS_WATCHED)); } + if (!response.isNull(CACHE_MY_NOTES)) { + cache.setPersonalNote(response.getString(CACHE_MY_NOTES)); + } + cache.setLogPasswordRequired(response.getBoolean(CACHE_REQ_PASSWORD)); cache.setDetailedUpdatedNow(); // save full detailed caches cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.parseCache", e); } return cache; @@ -366,7 +367,7 @@ final public class OkapiClient { } } - private static String absoluteUrl(String url, String geocode) { + private static String absoluteUrl(final String url, final String geocode) { final Uri uri = Uri.parse(url); if (!uri.isAbsolute()) { @@ -379,16 +380,16 @@ final public class OkapiClient { return url; } - private static String parseUser(JSONObject user) throws JSONException { + private static String parseUser(final JSONObject user) throws JSONException { return user.getString(USER_USERNAME); } - private static List<LogEntry> parseLogs(JSONArray logsJSON) { + private static List<LogEntry> parseLogs(final JSONArray logsJSON) { List<LogEntry> result = null; for (int i = 0; i < logsJSON.length(); i++) { try { - JSONObject logResponse = logsJSON.getJSONObject(i); - LogEntry log = new LogEntry( + final JSONObject logResponse = logsJSON.getJSONObject(i); + final LogEntry log = new LogEntry( parseUser(logResponse.getJSONObject(LOG_USER)), parseDate(logResponse.getString(LOG_DATE)).getTime(), parseLogType(logResponse.getString(LOG_TYPE)), @@ -397,23 +398,23 @@ final public class OkapiClient { result = new ArrayList<LogEntry>(); } result.add(log); - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.parseLogs", e); } } return result; } - private static List<Waypoint> parseWaypoints(JSONArray wptsJson) { + private static List<Waypoint> parseWaypoints(final JSONArray wptsJson) { List<Waypoint> result = null; for (int i = 0; i < wptsJson.length(); i++) { try { - JSONObject wptResponse = wptsJson.getJSONObject(i); - Waypoint wpt = new Waypoint(wptResponse.getString(WPT_NAME), + final JSONObject wptResponse = wptsJson.getJSONObject(i); + final Waypoint wpt = new Waypoint(wptResponse.getString(WPT_NAME), parseWptType(wptResponse.getString(WPT_TYPE)), false); wpt.setNote(wptResponse.getString(WPT_DESCRIPTION)); - Geopoint pt = parseCoords(wptResponse.getString(WPT_LOCATION)); + final Geopoint pt = parseCoords(wptResponse.getString(WPT_LOCATION)); if (pt != null) { wpt.setCoords(pt); } @@ -421,14 +422,14 @@ final public class OkapiClient { result = new ArrayList<Waypoint>(); } result.add(wpt); - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.parseWaypoints", e); } } return result; } - private static LogType parseLogType(String logType) { + private static LogType parseLogType(final String logType) { if ("Found it".equalsIgnoreCase(logType)) { return LogType.FOUND_IT; } @@ -438,7 +439,7 @@ final public class OkapiClient { return LogType.NOTE; } - private static WaypointType parseWptType(String wptType) { + private static WaypointType parseWptType(final String wptType) { if ("parking".equalsIgnoreCase(wptType)) { return WaypointType.PARKING; } @@ -464,11 +465,10 @@ final public class OkapiClient { } private static Date parseDate(final String date) { - final SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()); final String strippedDate = date.replaceAll("\\+0([0-9]){1}\\:00", "+0$100"); try { return ISO8601DATEFORMAT.parse(strippedDate); - } catch (ParseException e) { + } catch (final ParseException e) { Log.e("OkapiClient.parseDate", e); } return null; @@ -484,19 +484,19 @@ final public class OkapiClient { return null; } - private static List<String> parseAttributes(JSONArray nameList) { + private static List<String> parseAttributes(final JSONArray nameList) { - List<String> result = new ArrayList<String>(); + final List<String> result = new ArrayList<String>(); for (int i = 0; i < nameList.length(); i++) { try { - String name = nameList.getString(i); - CacheAttribute attr = CacheAttribute.getByOcId(AttributeParser.getOcDeId(name)); + final String name = nameList.getString(i); + final CacheAttribute attr = CacheAttribute.getByOcId(AttributeParser.getOcDeId(name)); if (attr != null) { result.add(attr.rawName); } - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.parseAttributes", e); } } @@ -517,7 +517,7 @@ final public class OkapiClient { double size = 0; try { size = response.getDouble(CACHE_SIZE); - } catch (JSONException e) { + } catch (final JSONException e) { Log.e("OkapiClient.getCacheSize", e); } switch ((int) Math.round(size)) { @@ -565,7 +565,7 @@ final public class OkapiClient { return CacheType.UNKNOWN; } - private static String getCoreFields(OCApiConnector connector) { + private static String getCoreFields(final OCApiConnector connector) { if (connector == null) { Log.e("OkapiClient.getCoreFields called with invalid connector"); return StringUtils.EMPTY; @@ -578,13 +578,13 @@ final public class OkapiClient { return SERVICE_CACHE_CORE_FIELDS; } - private static String getFullFields(OCApiConnector connector) { + private static String getFullFields(final OCApiConnector connector) { if (connector == null) { Log.e("OkapiClient.getFullFields called with invalid connector"); return StringUtils.EMPTY; } - StringBuilder res = new StringBuilder(500); + final StringBuilder res = new StringBuilder(500); res.append(SERVICE_CACHE_CORE_FIELDS); res.append(SEPARATOR).append(SERVICE_CACHE_ADDITIONAL_FIELDS); @@ -629,7 +629,7 @@ final public class OkapiClient { return "en"; } - private static void addFilterParams(final Map<String, String> valueMap, OCApiConnector connector) { + private static void addFilterParams(final Map<String, String> valueMap, final OCApiConnector connector) { if (!Settings.isExcludeDisabledCaches()) { valueMap.put("status", "Available|Temporarily unavailable"); } @@ -642,13 +642,13 @@ final public class OkapiClient { } } - private static void addRetrieveParams(final Parameters params, OCApiConnector connector) { + private static void addRetrieveParams(final Parameters params, final OCApiConnector connector) { params.add("retr_method", METHOD_RETRIEVE_CACHES); params.add("retr_params", "{\"fields\": \"" + getCoreFields(connector) + "\"}"); params.add("wrap", "true"); } - private static String getFilterFromType(CacheType cacheType) { + private static String getFilterFromType(final CacheType cacheType) { switch (cacheType) { case EVENT: return "Event"; @@ -667,67 +667,40 @@ final public class OkapiClient { } } - public static UserInfo getUserInfo(OCApiLiveConnector connector) { + public static UserInfo getUserInfo(final OCApiLiveConnector connector) { final Parameters params = new Parameters("fields", USER_INFO_FIELDS); final JSONObject data = request(connector, OkapiService.SERVICE_USER, params); if (data == null) { - return new UserInfo(StringUtils.EMPTY, 0, false); + return new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.FAILED); } String name = StringUtils.EMPTY; - int finds = 0; - boolean success = true; + boolean successUserName = false; if (!data.isNull(USER_USERNAME)) { try { name = data.getString(USER_USERNAME); - } catch (JSONException e) { + successUserName = true; + } catch (final JSONException e) { Log.e("OkapiClient.getUserInfo - name", e); - success = false; } - } else { - success = false; } + int finds = 0; + boolean successFinds = false; + if (!data.isNull(USER_CACHES_FOUND)) { try { finds = data.getInt(USER_CACHES_FOUND); - } catch (JSONException e) { + successFinds = true; + } catch (final JSONException e) { Log.e("OkapiClient.getUserInfo - finds", e); - success = false; } - } else { - success = false; - } - - return new UserInfo(name, finds, success); - } - - public static class UserInfo { - - private final String name; - private final int finds; - private final boolean retrieveSuccessful; - - UserInfo(String name, int finds, boolean retrieveSuccessful) { - this.name = name; - this.finds = finds; - this.retrieveSuccessful = retrieveSuccessful; } - public String getName() { - return name; - } - - public int getFinds() { - return finds; - } - - public boolean isRetrieveSuccessful() { - return retrieveSuccessful; - } + return new UserInfo(name, finds, successUserName && successFinds ? UserInfoStatus.SUCCESSFUL : UserInfoStatus.FAILED); } } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java index 8a94218..c995975 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java @@ -1,8 +1,8 @@ package cgeo.geocaching.connector.oc; import cgeo.geocaching.Geocache; -import cgeo.geocaching.TrackableLog; import cgeo.geocaching.LogCacheActivity; +import cgeo.geocaching.TrackableLog; import cgeo.geocaching.connector.ILoggingManager; import cgeo.geocaching.connector.ImageResult; import cgeo.geocaching.connector.LogResult; @@ -19,14 +19,14 @@ import java.util.List; public class OkapiLoggingManager implements ILoggingManager { - private final OCApiConnector connector; + private final OCApiLiveConnector connector; private final Geocache cache; private LogCacheActivity activity; - private final static List<LogType> standardLogTypes = Arrays.asList(LogType.FOUND_IT, LogType.DIDNT_FIND_IT, LogType.NOTE, LogType.NEEDS_MAINTENANCE); + private final static List<LogType> standardLogTypes = Arrays.asList(LogType.FOUND_IT, LogType.DIDNT_FIND_IT, LogType.NOTE); private final static List<LogType> eventLogTypes = Arrays.asList(LogType.WILL_ATTEND, LogType.ATTENDED, LogType.NOTE); - public OkapiLoggingManager(Activity activity, OCApiConnector connector, Geocache cache) { + public OkapiLoggingManager(Activity activity, OCApiLiveConnector connector, Geocache cache) { this.connector = connector; this.cache = cache; this.activity = (LogCacheActivity) activity; @@ -38,8 +38,10 @@ public class OkapiLoggingManager implements ILoggingManager { } @Override - public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, List<TrackableLog> trackableLogs) { - return OkapiClient.postLog(cache, logType, date, log, connector); + public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, String logPassword, List<TrackableLog> trackableLogs) { + final LogResult result = OkapiClient.postLog(cache, logType, date, log, logPassword, connector); + connector.login(null, null); + return result; } @Override diff --git a/main/src/cgeo/geocaching/connector/oc/UserInfo.java b/main/src/cgeo/geocaching/connector/oc/UserInfo.java new file mode 100644 index 0000000..0dc0440 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/oc/UserInfo.java @@ -0,0 +1,41 @@ +package cgeo.geocaching.connector.oc; + +import cgeo.geocaching.R; + +public class UserInfo { + + public enum UserInfoStatus { + NOT_RETRIEVED(R.string.init_login_popup_working), + SUCCESSFUL(R.string.init_login_popup_ok), + FAILED(R.string.init_login_popup_failed), + NOT_SUPPORTED(R.string.init_login_popup_not_authorized); + + public final int resId; + + UserInfoStatus(int resId) { + this.resId = resId; + } + } + + private final String name; + private final int finds; + private final UserInfoStatus status; + + UserInfo(String name, int finds, UserInfoStatus status) { + this.name = name; + this.finds = finds; + this.status = status; + } + + public String getName() { + return name; + } + + public int getFinds() { + return finds; + } + + public UserInfoStatus getStatus() { + return status; + } +} |
