aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java11
-rw-r--r--main/src/cgeo/geocaching/connector/IConnector.java14
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java9
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java31
4 files changed, 62 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index 08bdb56..83c1b6f 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -48,6 +48,17 @@ public abstract class AbstractConnector implements IConnector {
}
/**
+ * Uploading personal note to website
+ *
+ * @param cache
+ * @return success
+ */
+ @Override
+ public boolean uploadPersonalNote(Geocache cache) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
* {@link IConnector}
*/
@Override
diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java
index 9470e72..c44b946 100644
--- a/main/src/cgeo/geocaching/connector/IConnector.java
+++ b/main/src/cgeo/geocaching/connector/IConnector.java
@@ -151,13 +151,12 @@ public interface IConnector {
public boolean supportsOwnCoordinates();
/**
- * Uploading modified coordinates to website
+ * Uploading personal note to website
*
* @param cache
- * @param wpt
* @return success
*/
- public boolean uploadModifiedCoordinates(Geocache cache, Geopoint wpt);
+ public boolean uploadPersonalNote(Geocache cache);
/**
* Reseting of modified coordinates on website to details
@@ -168,6 +167,15 @@ public interface IConnector {
public boolean deleteModifiedCoordinates(Geocache cache);
/**
+ * Uploading modified coordinates to website
+ *
+ * @param cache
+ * @param wpt
+ * @return success
+ */
+ public boolean uploadModifiedCoordinates(Geocache cache, Geopoint wpt);
+
+ /**
* Return true if this connector is activated for online
* interaction (download details, do searches, ...)
*
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index f327dc1..d7fbbab 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -241,6 +241,15 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
}
@Override
+ public boolean uploadPersonalNote(Geocache cache) {
+ final boolean uploaded = GCParser.uploadPersonalNote(cache);
+ if (uploaded) {
+ cgData.saveChangedCache(cache);
+ }
+ return uploaded;
+ }
+
+ @Override
public SearchResult searchByCenter(Geopoint center) {
// TODO make search by coordinate use this method. currently it is just a marker that this connector supports search by center
return null;
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index f9c5fba..87f5985 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -1807,4 +1807,35 @@ public abstract class GCParser {
return false;
}
+ public static boolean uploadPersonalNote(Geocache cache) {
+ final String page = requestHtmlPage(cache.getGeocode(), null, "n", "0");
+ final String userToken = BaseUtils.getMatch(page, GCConstants.PATTERN_USERTOKEN, "");
+ if (StringUtils.isEmpty(userToken)) {
+ return false;
+ }
+
+ try {
+ JSONObject jo = new JSONObject()
+ .put("dto", (new JSONObject()
+ .put("et", cache.getPersonalNote())
+ .put("ut", userToken)));
+
+ final String uriSuffix = "SetUserCacheNote";
+
+ final String uriPrefix = "http://www.geocaching.com/seek/cache_details.aspx/";
+ HttpResponse response = Network.postJsonRequest(uriPrefix + uriSuffix, jo);
+ Log.i("Sending to " + uriPrefix + uriSuffix + " :" + jo.toString());
+
+ if (response != null && response.getStatusLine().getStatusCode() == 200) {
+ Log.i("GCParser.uploadPersonalNote - uploaded to GC.com");
+ return true;
+ }
+
+ } catch (JSONException e) {
+ Log.e("Unknown exception with json wrap code", e);
+ }
+ Log.e("GCParser.uploadPersonalNote - cannot upload personal note");
+ return false;
+ }
+
}