aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/connector/ec/ECApi.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/connector/ec/ECApi.java')
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECApi.java46
1 files changed, 45 insertions, 1 deletions
diff --git a/main/src/cgeo/geocaching/connector/ec/ECApi.java b/main/src/cgeo/geocaching/connector/ec/ECApi.java
index 8c1a428..62571ae 100644
--- a/main/src/cgeo/geocaching/connector/ec/ECApi.java
+++ b/main/src/cgeo/geocaching/connector/ec/ECApi.java
@@ -2,8 +2,11 @@ package cgeo.geocaching.connector.ec;
import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.connector.LogResult;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
+import cgeo.geocaching.enumerations.LogType;
+import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.list.StoredList;
@@ -15,19 +18,24 @@ import ch.boye.httpclientandroidlib.HttpResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.FastDateFormat;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
public class ECApi {
private static final String API_URL = "http://extremcaching.com/exports/api.php";
+ private static final FastDateFormat LOG_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSSZ", TimeZone.getTimeZone("UTC"), Locale.US);
public static String cleanCode(String geocode) {
return geocode.replace("EC", "");
@@ -73,6 +81,40 @@ public class ECApi {
return importCachesFromJSON(response);
}
+ public static LogResult postLog(final Geocache cache, final LogType logType, final Calendar date, final String log) {
+ return postLog(cache, logType, date, log, false);
+ }
+
+ public static LogResult postLog(final Geocache cache, final LogType logType, final Calendar date, final String log, boolean isRetry) {
+ final Parameters params = new Parameters("cache_id", cache.getGeocode());
+ params.add("type", logType.type);
+ params.add("log", log);
+ params.add("date", LOG_DATE_FORMAT.format(date.getTime()));
+
+ final String uri = "http://extremcaching.com/exports/log.php";
+ final HttpResponse response = Network.postRequest(uri, params);
+
+ if (response == null) {
+ return new LogResult(StatusCode.LOG_POST_ERROR_EC, "");
+ }
+ if (!isRetry && response.getStatusLine().getStatusCode() == 403) {
+ if (ECLogin.login() == StatusCode.NO_ERROR) {
+ apiRequest(uri, params, true);
+ }
+ }
+ if (response.getStatusLine().getStatusCode() != 200) {
+ return new LogResult(StatusCode.LOG_POST_ERROR_EC, "");
+ }
+
+ final String data = Network.getResponseDataAlways(response);
+ if (data != null && !StringUtils.isBlank(data) && StringUtils.contains(data, "success")) {
+ final String uid = StringUtils.remove(data, "success:");
+ return new LogResult(StatusCode.NO_ERROR, uid);
+ }
+
+ return new LogResult(StatusCode.LOG_POST_ERROR_EC, "");
+ }
+
private static HttpResponse apiRequest(final Parameters params) {
return apiRequest(API_URL, params, false);
@@ -89,7 +131,9 @@ public class ECApi {
return null;
}
if (!isRetry && response.getStatusLine().getStatusCode() == 403) {
- apiRequest(uri, params, true);
+ if (ECLogin.login() == StatusCode.NO_ERROR) {
+ apiRequest(uri, params, true);
+ }
}
if (response.getStatusLine().getStatusCode() != 200) {
return null;