aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrel00p <rel00p@gmx.net>2013-12-08 23:07:02 +0100
committerBananeweizen <bananeweizen@gmx.de>2013-12-16 08:08:02 +0100
commite0b00544959d0a1ef99bb783fb08823bfe8afb1c (patch)
tree71f476a35b24b334b97faaa16d917312188f1a66 /main
parent7cce6bf5096b3ffa0653d33c57f9d554272ef01e (diff)
downloadcgeo-e0b00544959d0a1ef99bb783fb08823bfe8afb1c.zip
cgeo-e0b00544959d0a1ef99bb783fb08823bfe8afb1c.tar.gz
cgeo-e0b00544959d0a1ef99bb783fb08823bfe8afb1c.tar.bz2
extremcaching connector added logging capabillity
Diffstat (limited to 'main')
-rw-r--r--main/res/values-de/strings.xml1
-rw-r--r--main/res/values/strings.xml1
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECApi.java46
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECConnector.java36
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECLoggingManager.java60
-rw-r--r--main/src/cgeo/geocaching/enumerations/StatusCode.java1
6 files changed, 144 insertions, 1 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index dbd7184..78af574 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -180,6 +180,7 @@
<string name="err_log_load_data_still">c:geo lädt gerade die benötigten Daten. Bitte kurz warten.</string>
<string name="err_log_failed_server">c:geo konnte Log nicht senden, weil der Server nicht antwortete.</string>
<string name="err_log_post_failed">c:geo konnte Log nicht absenden.</string>
+ <string name="err_log_post_failed_ec">Es scheint dass Ihr Log nicht hochgeladen werden konnte. Bitte prüfen Sie es auf Extremcaching.com nach.</string>
<string name="err_logimage_post_failed">Es scheint dass Ihr Logfoto nicht hochgeladen werden konnte. Bitte prüfen Sie es auf Geocaching.com nach.</string>
<string name="err_search_address_forgot">c:geo hat die Adresse vergessen, die gesucht wurde.</string>
<string name="err_parse_lat">c:geo konnte den Breitengrad nicht verarbeiten.</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 75537e3..5110a73 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -204,6 +204,7 @@
<string name="err_log_load_data_still">c:geo is still loading data required to post log. Please wait a little while longer.</string>
<string name="err_log_failed_server">c:geo failed to post log because server is not responding.</string>
<string name="err_log_post_failed">It seems that your log was not posted. Please check it on Geocaching.com.</string>
+ <string name="err_log_post_failed_ec">It seems that your log was not posted. Please check it on Extremcaching.com.</string>
<string name="err_logimage_post_failed">It seems that your log image was not uploaded. Please check it on Geocaching.com.</string>
<string name="err_search_address_forgot">c:geo forgot the address you tried to find.</string>
<string name="err_parse_lat">c:geo can\'t parse latitude.</string>
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;
diff --git a/main/src/cgeo/geocaching/connector/ec/ECConnector.java b/main/src/cgeo/geocaching/connector/ec/ECConnector.java
index b14ee08..8c5f0a1 100644
--- a/main/src/cgeo/geocaching/connector/ec/ECConnector.java
+++ b/main/src/cgeo/geocaching/connector/ec/ECConnector.java
@@ -3,13 +3,16 @@ package cgeo.geocaching.connector.ec;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.ICache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.connector.AbstractConnector;
+import cgeo.geocaching.connector.ILoggingManager;
import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
+import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
@@ -22,7 +25,9 @@ import org.apache.commons.lang3.StringUtils;
import android.content.Context;
import android.os.Handler;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.regex.Pattern;
public class ECConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ILogin {
@@ -186,4 +191,35 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode,
return "© " + cache.getOwnerDisplayName() + ", <a href=\"" + getCacheUrl(cache) + "\">" + getName() + "</a>, CC BY-NC-ND 3.0, alle Logeinträge © jeweiliger Autor";
}
+ @Override
+ public boolean supportsLogging() {
+ return true;
+ }
+
+ @Override
+ public boolean canLog(Geocache cache) {
+ return true;
+ }
+
+ @Override
+ public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) {
+ return new ECLoggingManager(activity, this, cache);
+ }
+
+ @Override
+ public List<LogType> getPossibleLogTypes(Geocache geocache) {
+ final List<LogType> logTypes = new ArrayList<LogType>();
+ if (geocache.isEventCache()) {
+ logTypes.add(LogType.WILL_ATTEND);
+ logTypes.add(LogType.ATTENDED);
+ } else {
+ logTypes.add(LogType.FOUND_IT);
+ }
+ if (!geocache.isEventCache()) {
+ logTypes.add(LogType.DIDNT_FIND_IT);
+ }
+ logTypes.add(LogType.NOTE);
+ return logTypes;
+ }
+
}
diff --git a/main/src/cgeo/geocaching/connector/ec/ECLoggingManager.java b/main/src/cgeo/geocaching/connector/ec/ECLoggingManager.java
new file mode 100644
index 0000000..716c0a3
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/ec/ECLoggingManager.java
@@ -0,0 +1,60 @@
+package cgeo.geocaching.connector.ec;
+
+import cgeo.geocaching.Geocache;
+import cgeo.geocaching.LogCacheActivity;
+import cgeo.geocaching.TrackableLog;
+import cgeo.geocaching.connector.ILoggingManager;
+import cgeo.geocaching.connector.ImageResult;
+import cgeo.geocaching.connector.LogResult;
+import cgeo.geocaching.enumerations.LogType;
+
+import android.net.Uri;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.List;
+
+public class ECLoggingManager implements ILoggingManager {
+
+ private final ECConnector connector;
+ private final Geocache cache;
+ private LogCacheActivity activity;
+
+ public ECLoggingManager(final LogCacheActivity activity, final ECConnector connector, final Geocache cache) {
+ this.connector = connector;
+ this.cache = cache;
+ this.activity = activity;
+ }
+
+ @Override
+ public final void init() {
+ activity.onLoadFinished();
+ }
+
+ @Override
+ public final LogResult postLog(final Geocache cache, final LogType logType, final Calendar date, final String log, final String logPassword, final List<TrackableLog> trackableLogs) {
+ final LogResult result = ECApi.postLog(cache, logType, date, log);
+ return result;
+ }
+
+ @Override
+ public final ImageResult postLogImage(final String logId, final String imageCaption, final String imageDescription, final Uri imageUri) {
+ return null;
+ }
+
+ @Override
+ public final boolean hasLoaderError() {
+ return false;
+ }
+
+ @Override
+ public final List<TrackableLog> getTrackables() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List<LogType> getPossibleLogTypes() {
+ return connector.getPossibleLogTypes(cache);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/enumerations/StatusCode.java b/main/src/cgeo/geocaching/enumerations/StatusCode.java
index 8c1db47..e1a1aaa 100644
--- a/main/src/cgeo/geocaching/enumerations/StatusCode.java
+++ b/main/src/cgeo/geocaching/enumerations/StatusCode.java
@@ -22,6 +22,7 @@ public enum StatusCode {
PREMIUM_ONLY(R.string.err_premium_only),
MAINTENANCE(R.string.err_maintenance),
LOG_POST_ERROR(R.string.err_log_post_failed),
+ LOG_POST_ERROR_EC(R.string.err_log_post_failed_ec),
NO_LOG_TEXT(R.string.warn_log_text_fill),
NO_DATA_FROM_SERVER(R.string.err_log_failed_server),
NOT_LOGGED_IN(R.string.init_login_popup_failed),