diff options
Diffstat (limited to 'main/src/cgeo/geocaching/connector')
3 files changed, 47 insertions, 1 deletions
diff --git a/main/src/cgeo/geocaching/connector/capability/IgnoreCapability.java b/main/src/cgeo/geocaching/connector/capability/IgnoreCapability.java new file mode 100644 index 0000000..5eca3f2 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/capability/IgnoreCapability.java @@ -0,0 +1,14 @@ +package cgeo.geocaching.connector.capability; + +import cgeo.geocaching.Geocache; +import cgeo.geocaching.connector.IConnector; + +import org.eclipse.jdt.annotation.NonNull; + +/** + * Connector capability to ignore caches. + */ +public interface IgnoreCapability extends IConnector { + public boolean canIgnoreCache(final @NonNull Geocache cache); + public void ignoreCache(final @NonNull Geocache cache); +} diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 3ad8117..2349392 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -19,6 +19,7 @@ import cgeo.geocaching.connector.capability.ISearchByGeocode; import cgeo.geocaching.connector.capability.ISearchByKeyword; import cgeo.geocaching.connector.capability.ISearchByOwner; import cgeo.geocaching.connector.capability.ISearchByViewPort; +import cgeo.geocaching.connector.capability.IgnoreCapability; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.loaders.RecaptchaReceiver; import cgeo.geocaching.location.Geopoint; @@ -47,7 +48,7 @@ import java.io.File; import java.util.List; import java.util.regex.Pattern; -public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ISearchByKeyword, ILogin, ICredentials, ISearchByOwner, ISearchByFinder, FieldNotesCapability { +public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ISearchByKeyword, ILogin, ICredentials, ISearchByOwner, ISearchByFinder, FieldNotesCapability, IgnoreCapability { @NonNull private static final String CACHE_URL_SHORT = "http://coord.info/"; @@ -481,4 +482,14 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, return true; } + @Override + public boolean canIgnoreCache(@NonNull final Geocache cache) { + return StringUtils.isNotEmpty(cache.getType().wptTypeId); + } + + @Override + public void ignoreCache(@NonNull final Geocache cache) { + GCParser.ignoreCache(cache); + } + } diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 4a8451b..bcc552b 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -1979,4 +1979,25 @@ public abstract class GCParser { return false; } + public static boolean ignoreCache(@NonNull final Geocache cache) { + final String uri = "http://www.geocaching.com/bookmarks/ignore.aspx?guid=" + cache.getGuid() + "&WptTypeID=" + cache.getType().wptTypeId; + final String page = GCLogin.getInstance().postRequestLogged(uri, null); + + if (StringUtils.isBlank(page)) { + Log.e("GCParser.ignoreCache: No data from server"); + return false; + } + + final String[] viewstates = GCLogin.getViewstates(page); + + final Parameters params = new Parameters( + "__EVENTTARGET", "", + "__EVENTARGUMENT", "", + "ctl00$ContentBody$btnYes", "Yes. Ignore it."); + + GCLogin.putViewstates(params, viewstates); + final String response = Network.getResponseData(Network.postRequest(uri, params)); + + return StringUtils.contains(response, "<p class=\"Success\">"); + } } |
