aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2015-01-07 14:51:03 +0100
committerSamuel Tardieu <sam@rfc1149.net>2015-01-07 14:56:35 +0100
commit48beda1583731ed7c70637237e8bd4bd8e45af4a (patch)
treebaeb0e19bc41ae20081b1dcf92a07ddb879b19f4
parentd3dc2be5040ea3f4846d9b948c3a0f95b9359f71 (diff)
downloadcgeo-48beda1583731ed7c70637237e8bd4bd8e45af4a.zip
cgeo-48beda1583731ed7c70637237e8bd4bd8e45af4a.tar.gz
cgeo-48beda1583731ed7c70637237e8bd4bd8e45af4a.tar.bz2
Make the fetching of pocket query an observable
-rw-r--r--main/src/cgeo/geocaching/PocketQueryList.java13
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java78
2 files changed, 44 insertions, 47 deletions
diff --git a/main/src/cgeo/geocaching/PocketQueryList.java b/main/src/cgeo/geocaching/PocketQueryList.java
index 962c6e2..27edffd 100644
--- a/main/src/cgeo/geocaching/PocketQueryList.java
+++ b/main/src/cgeo/geocaching/PocketQueryList.java
@@ -2,13 +2,9 @@ package cgeo.geocaching;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.gc.GCParser;
-import cgeo.geocaching.utils.RxUtils;
import org.apache.commons.collections4.CollectionUtils;
-import rx.Observable;
-import rx.Observable.OnSubscribe;
-import rx.Subscriber;
import rx.android.app.AppObservable;
import rx.functions.Action1;
@@ -47,13 +43,7 @@ public final class PocketQueryList {
public static void promptForListSelection(final Activity activity, final Action1<PocketQueryList> runAfterwards) {
final Dialog waitDialog = ProgressDialog.show(activity, activity.getString(R.string.search_pocket_title), activity.getString(R.string.search_pocket_loading), true, true);
- AppObservable.bindActivity(activity, Observable.create(new OnSubscribe<List<PocketQueryList>>() {
- @Override
- public void call(final Subscriber<? super List<PocketQueryList>> subscriber) {
- subscriber.onNext(GCParser.searchPocketQueryList());
- subscriber.onCompleted();
- }
- })).subscribeOn(RxUtils.networkScheduler).subscribe(new Action1<List<PocketQueryList>>() {
+ AppObservable.bindActivity(activity, GCParser.searchPocketQueryListObservable).subscribe(new Action1<List<PocketQueryList>>() {
@Override
public void call(final List<PocketQueryList> pocketQueryLists) {
waitDialog.dismiss();
@@ -61,6 +51,7 @@ public final class PocketQueryList {
}
});
}
+
private static void selectFromPocketQueries(final Activity activity, final List<PocketQueryList> pocketQueryList, final Action1<PocketQueryList> runAfterwards) {
if (CollectionUtils.isEmpty(pocketQueryList)) {
ActivityMixin.showToast(activity, activity.getString(R.string.warn_no_pocket_query_found));
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index ab11df6..5c03dd7 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -986,52 +986,58 @@ public abstract class GCParser {
return trackable;
}
- public static List<PocketQueryList> searchPocketQueryList() {
-
- final Parameters params = new Parameters();
+ /**
+ * Observable that fetches a list of pocket queries. Returns a single element (which may be an empty list).
+ * Executes on the network scheduler.
+ */
+ public static final Observable<List<PocketQueryList>> searchPocketQueryListObservable = Async.fromCallable(new Func0<List<PocketQueryList>>() {
+ @Override
+ public List<PocketQueryList> call() {
+ final Parameters params = new Parameters();
- final String page = GCLogin.getInstance().getRequestLogged("http://www.geocaching.com/pocket/default.aspx", params);
+ final String page = GCLogin.getInstance().getRequestLogged("http://www.geocaching.com/pocket/default.aspx", params);
- if (StringUtils.isBlank(page)) {
- Log.e("GCParser.searchPocketQueryList: No data from server");
- return null;
- }
+ if (StringUtils.isBlank(page)) {
+ Log.e("GCParser.searchPocketQueryList: No data from server");
+ return Collections.emptyList();
+ }
- final String subPage = StringUtils.substringAfter(page, "class=\"PocketQueryListTable");
- if (StringUtils.isEmpty(subPage)) {
- Log.e("GCParser.searchPocketQueryList: class \"PocketQueryListTable\" not found on page");
- return Collections.emptyList();
- }
+ final String subPage = StringUtils.substringAfter(page, "class=\"PocketQueryListTable");
+ if (StringUtils.isEmpty(subPage)) {
+ Log.e("GCParser.searchPocketQueryList: class \"PocketQueryListTable\" not found on page");
+ return Collections.emptyList();
+ }
- final List<PocketQueryList> list = new ArrayList<>();
+ final List<PocketQueryList> list = new ArrayList<>();
- final MatcherWrapper matcherPocket = new MatcherWrapper(GCConstants.PATTERN_LIST_PQ, subPage);
+ final MatcherWrapper matcherPocket = new MatcherWrapper(GCConstants.PATTERN_LIST_PQ, subPage);
- while (matcherPocket.find()) {
- int maxCaches;
- try {
- maxCaches = Integer.parseInt(matcherPocket.group(1));
- } catch (final NumberFormatException e) {
- maxCaches = 0;
- Log.e("GCParser.searchPocketQueryList: Unable to parse max caches", e);
+ while (matcherPocket.find()) {
+ int maxCaches;
+ try {
+ maxCaches = Integer.parseInt(matcherPocket.group(1));
+ } catch (final NumberFormatException e) {
+ maxCaches = 0;
+ Log.e("GCParser.searchPocketQueryList: Unable to parse max caches", e);
+ }
+ final String guid = Html.fromHtml(matcherPocket.group(2)).toString();
+ final String name = Html.fromHtml(matcherPocket.group(3)).toString();
+ final PocketQueryList pqList = new PocketQueryList(guid, name, maxCaches);
+ list.add(pqList);
}
- final String guid = Html.fromHtml(matcherPocket.group(2)).toString();
- final String name = Html.fromHtml(matcherPocket.group(3)).toString();
- final PocketQueryList pqList = new PocketQueryList(guid, name, maxCaches);
- list.add(pqList);
- }
- // just in case, lets sort the resulting list
- Collections.sort(list, new Comparator<PocketQueryList>() {
+ // just in case, lets sort the resulting list
+ Collections.sort(list, new Comparator<PocketQueryList>() {
- @Override
- public int compare(final PocketQueryList left, final PocketQueryList right) {
- return String.CASE_INSENSITIVE_ORDER.compare(left.getName(), right.getName());
- }
- });
+ @Override
+ public int compare(final PocketQueryList left, final PocketQueryList right) {
+ return String.CASE_INSENSITIVE_ORDER.compare(left.getName(), right.getName());
+ }
+ });
- return list;
- }
+ return list;
+ }
+ }, RxUtils.networkScheduler);
public static ImmutablePair<StatusCode, String> postLog(final String geocode, final String cacheid, final String[] viewstates,
final LogType logType, final int year, final int month, final int day,