From bccff6ccdbb4ba09f887467cf8ef376ea2983ecf Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Tue, 9 Sep 2014 13:28:58 +0200 Subject: Do not reextract userToken for every kind of log we want to extract --- .../src/cgeo/geocaching/connector/gc/GCParser.java | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 6919173..35a2f52 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -376,7 +376,7 @@ public abstract class GCParser { final SearchResult result = new SearchResult(parsed.left); if (parsed.left == StatusCode.NO_ERROR) { result.addAndPutInCache(Collections.singletonList(parsed.right)); - DataStore.saveLogsWithoutTransaction(parsed.right.getGeocode(), getLogs(page, Logs.ALL).toBlocking().toIterable()); + DataStore.saveLogsWithoutTransaction(parsed.right.getGeocode(), getLogs(parseUserToken(page), Logs.ALL).toBlocking().toIterable()); } return result; } @@ -1420,7 +1420,10 @@ public abstract class GCParser { } private static String getUserToken(final Geocache cache) { - final String page = requestHtmlPage(cache.getGeocode(), null, "n"); + return parseUserToken(requestHtmlPage(cache.getGeocode(), null, "n")); + } + + private static String parseUserToken(final String page) { return TextUtils.getMatch(page, GCConstants.PATTERN_USERTOKEN, ""); } @@ -1665,17 +1668,15 @@ public abstract class GCParser { * The logType to request * @return Observable The logs */ - private static Observable getLogs(final String page, final Logs logType) { + private static Observable getLogs(final String userToken, final Logs logType) { + if (userToken.isEmpty()) { + Log.e("GCParser.loadLogsFromDetails: unable to extract userToken"); + return Observable.empty(); + } + return Observable.defer(new Func0>() { @Override public Observable call() { - final MatcherWrapper userTokenMatcher = new MatcherWrapper(GCConstants.PATTERN_USERTOKEN, page); - if (!userTokenMatcher.find()) { - Log.e("GCParser.loadLogsFromDetails: unable to extract userToken"); - return Observable.empty(); - } - - final String userToken = userTokenMatcher.group(1); final Parameters params = new Parameters( "tkn", userToken, "idx", "1", @@ -1864,10 +1865,11 @@ public abstract class GCParser { } CancellableHandler.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_logs); - final Observable logs = getLogs(page, Logs.ALL); - final Observable ownLogs = getLogs(page, Logs.OWN).cache(); + final String userToken = parseUserToken(page); + final Observable logs = getLogs(userToken, Logs.ALL); + final Observable ownLogs = getLogs(userToken, Logs.OWN).cache(); final Observable specialLogs = Settings.isFriendLogsWanted() ? - Observable.merge(getLogs(page, Logs.FRIENDS), ownLogs) : Observable.empty(); + Observable.merge(getLogs(userToken, Logs.FRIENDS), ownLogs) : Observable.empty(); final Observable> mergedLogs = Observable.zip(logs.toList(), specialLogs.toList(), new Func2, List, List>() { @Override -- cgit v1.1