aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/connector
diff options
context:
space:
mode:
authorPortree-Kid <keith.paterson@gmx.de>2013-03-08 15:06:41 +0100
committerPortree-Kid <keith.paterson@gmx.de>2013-03-08 15:06:41 +0100
commita0932683fdf840fd97464e93a4597fac5c93a731 (patch)
treea0e27bbad9012436d378da27f3e2b052a0edb2f3 /main/src/cgeo/geocaching/connector
parentcfb16fb725c069f59d545a50ba40045320a55c2c (diff)
downloadcgeo-a0932683fdf840fd97464e93a4597fac5c93a731.zip
cgeo-a0932683fdf840fd97464e93a4597fac5c93a731.tar.gz
cgeo-a0932683fdf840fd97464e93a4597fac5c93a731.tar.bz2
Refactoring to use Loaders fixes #2365
Diffstat (limited to 'main/src/cgeo/geocaching/connector')
-rw-r--r--main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java68
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCMap.java5
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java33
-rw-r--r--main/src/cgeo/geocaching/connector/gc/SearchHandler.java5
4 files changed, 23 insertions, 88 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java b/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java
deleted file mode 100644
index f19064d..0000000
--- a/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package cgeo.geocaching.connector.gc;
-
-import cgeo.geocaching.utils.Log;
-
-import android.os.Handler;
-import android.os.Message;
-
-abstract public class AbstractSearchThread extends Thread {
- private Handler recaptchaHandler = null;
- private String recaptchaChallenge = null;
- private String recaptchaText = null;
- private final Handler handler;
- private static AbstractSearchThread currentInstance;
-
- protected AbstractSearchThread(final Handler handler) {
- this.handler = handler;
- }
-
- public void setRecaptchaHandler(Handler recaptchaHandlerIn) {
- recaptchaHandler = recaptchaHandlerIn;
- }
-
- public void notifyNeed() {
- if (recaptchaHandler != null) {
- recaptchaHandler.sendEmptyMessage(1);
- }
- }
-
- public synchronized void waitForUser() {
- try {
- wait();
- } catch (InterruptedException e) {
- Log.w("searchThread is not waiting for user…");
- }
- }
-
- public void setChallenge(String challenge) {
- recaptchaChallenge = challenge;
- }
-
- public String getChallenge() {
- return recaptchaChallenge;
- }
-
- public synchronized void setText(String text) {
- recaptchaText = text;
-
- notify();
- }
-
- public synchronized String getText() {
- return recaptchaText;
- }
-
- @Override
- final public void run() {
- super.run();
- currentInstance = this;
- runSearch();
- handler.sendMessage(Message.obtain());
- }
-
- protected abstract void runSearch();
-
- public static AbstractSearchThread getCurrentInstance() {
- return currentInstance;
- }
-}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java
index 2e1dff0..5f16e10 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCMap.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.connector.gc;
+import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.Settings;
-import cgeo.geocaching.Geocache;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheSize;
@@ -352,7 +352,8 @@ public class GCMap {
if (strategy.flags.contains(StrategyFlag.SEARCH_NEARBY)) {
final Geopoint center = viewport.getCenter();
if ((lastSearchViewport == null) || !lastSearchViewport.contains(center)) {
- SearchResult search = GCParser.searchByCoords(center, Settings.getCacheType(), false);
+ //FIXME We don't have a RecaptchaReceiver!?
+ SearchResult search = GCParser.searchByCoords(center, Settings.getCacheType(), false, null);
if (search != null && !search.isEmpty()) {
final Set<String> geocodes = search.getGeocodes();
if (Settings.isPremiumMember()) {
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index 9707e06..9561b87 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -24,6 +24,7 @@ import cgeo.geocaching.gcvote.GCVote;
import cgeo.geocaching.gcvote.GCVoteRating;
import cgeo.geocaching.geopoint.DistanceParser;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.loaders.RecaptchaReceiver;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.ui.DirectionImage;
@@ -62,7 +63,7 @@ public abstract class GCParser {
private final static SimpleDateFormat dateTbIn1 = new SimpleDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009
private final static SimpleDateFormat dateTbIn2 = new SimpleDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009
- private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha) {
+ private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha, RecaptchaReceiver thread) {
if (StringUtils.isBlank(pageContent)) {
Log.e("GCParser.parseSearch: No page given");
return null;
@@ -76,7 +77,6 @@ public abstract class GCParser {
searchResult.viewstates = Login.getViewstates(page);
// recaptcha
- AbstractSearchThread thread = AbstractSearchThread.getCurrentInstance();
String recaptchaChallenge = null;
if (showCaptcha) {
String recaptchaJsParam = BaseUtils.getMatch(page, GCConstants.PATTERN_SEARCH_RECAPTCHA, false, null);
@@ -702,7 +702,7 @@ public abstract class GCParser {
return searchResult;
}
- public static SearchResult searchByNextPage(final SearchResult search, boolean showCaptcha) {
+ public static SearchResult searchByNextPage(final SearchResult search, boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) {
if (search == null) {
return search;
}
@@ -739,7 +739,7 @@ public abstract class GCParser {
return search;
}
- final SearchResult searchResult = parseSearch(url, page, showCaptcha);
+ final SearchResult searchResult = parseSearch(url, page, showCaptcha, recaptchaReceiver);
if (searchResult == null || CollectionUtils.isEmpty(searchResult.getGeocodes())) {
Log.w("GCParser.searchByNextPage: No cache parsed");
return search;
@@ -784,9 +784,10 @@ public abstract class GCParser {
* @param showCaptcha
* @param params
* the parameters to add to the request URI
+ * @param recaptchaReceiver
* @return
*/
- private static SearchResult searchByAny(final CacheType cacheType, final boolean my, final boolean showCaptcha, final Parameters params) {
+ private static SearchResult searchByAny(final CacheType cacheType, final boolean my, final boolean showCaptcha, final Parameters params, RecaptchaReceiver recaptchaReceiver) {
insertCacheType(params, cacheType);
final String uri = "http://www.geocaching.com/seek/nearest.aspx";
@@ -798,7 +799,7 @@ public abstract class GCParser {
return null;
}
- final SearchResult searchResult = parseSearch(fullUri, page, showCaptcha);
+ final SearchResult searchResult = parseSearch(fullUri, page, showCaptcha, recaptchaReceiver);
if (searchResult == null || CollectionUtils.isEmpty(searchResult.getGeocodes())) {
Log.e("GCParser.searchByAny: No cache parsed");
return searchResult;
@@ -811,22 +812,22 @@ public abstract class GCParser {
return search;
}
- public static SearchResult searchByCoords(final Geopoint coords, final CacheType cacheType, final boolean showCaptcha) {
+ public static SearchResult searchByCoords(final Geopoint coords, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) {
final Parameters params = new Parameters("lat", Double.toString(coords.getLatitude()), "lng", Double.toString(coords.getLongitude()));
- return searchByAny(cacheType, false, showCaptcha, params);
+ return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver);
}
- public static SearchResult searchByKeyword(final String keyword, final CacheType cacheType, final boolean showCaptcha) {
+ public static SearchResult searchByKeyword(final String keyword, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) {
if (StringUtils.isBlank(keyword)) {
Log.e("GCParser.searchByKeyword: No keyword given");
return null;
}
final Parameters params = new Parameters("key", keyword);
- return searchByAny(cacheType, false, showCaptcha, params);
+ return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver);
}
- public static SearchResult searchByUsername(final String userName, final CacheType cacheType, final boolean showCaptcha) {
+ public static SearchResult searchByUsername(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) {
if (StringUtils.isBlank(userName)) {
Log.e("GCParser.searchByUsername: No user name given");
return null;
@@ -840,20 +841,20 @@ public abstract class GCParser {
Log.i("GCParser.searchByUsername: Overriding users choice, downloading all caches.");
}
- return searchByAny(cacheType, my, showCaptcha, params);
+ return searchByAny(cacheType, my, showCaptcha, params, recaptchaReceiver);
}
- public static SearchResult searchByOwner(final String userName, final CacheType cacheType, final boolean showCaptcha) {
+ public static SearchResult searchByOwner(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) {
if (StringUtils.isBlank(userName)) {
Log.e("GCParser.searchByOwner: No user name given");
return null;
}
final Parameters params = new Parameters("u", userName);
- return searchByAny(cacheType, false, showCaptcha, params);
+ return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver);
}
- public static SearchResult searchByAddress(final String address, final CacheType cacheType, final boolean showCaptcha) {
+ public static SearchResult searchByAddress(final String address, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) {
if (StringUtils.isBlank(address)) {
Log.e("GCParser.searchByAddress: No address given");
return null;
@@ -873,7 +874,7 @@ public abstract class GCParser {
if (data == null) {
return null;
}
- return searchByCoords(new Geopoint(data.getDouble("lat"), data.getDouble("lng")), cacheType, showCaptcha);
+ return searchByCoords(new Geopoint(data.getDouble("lat"), data.getDouble("lng")), cacheType, showCaptcha, recaptchaReceiver);
} catch (JSONException e) {
Log.w("GCParser.searchByAddress", e);
}
diff --git a/main/src/cgeo/geocaching/connector/gc/SearchHandler.java b/main/src/cgeo/geocaching/connector/gc/SearchHandler.java
index 2351554..840cad1 100644
--- a/main/src/cgeo/geocaching/connector/gc/SearchHandler.java
+++ b/main/src/cgeo/geocaching/connector/gc/SearchHandler.java
@@ -1,6 +1,7 @@
package cgeo.geocaching.connector.gc;
import cgeo.geocaching.R;
+import cgeo.geocaching.loaders.RecaptchaReceiver;
import cgeo.geocaching.utils.Log;
import android.app.Activity;
@@ -24,7 +25,7 @@ import java.net.URL;
public class SearchHandler extends Handler {
private Activity activity = null;
private Resources res = null;
- private AbstractSearchThread recaptchaThread = null;
+ private RecaptchaReceiver recaptchaThread = null;
private ImageView imageView = null;
private Bitmap img = null;
@@ -41,7 +42,7 @@ public class SearchHandler extends Handler {
}
};
- public SearchHandler(Activity activityIn, Resources resIn, AbstractSearchThread recaptchaThreadIn) {
+ public SearchHandler(Activity activityIn, Resources resIn, RecaptchaReceiver recaptchaThreadIn) {
activity = activityIn;
res = resIn;
recaptchaThread = recaptchaThreadIn;