aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSammysHP <sven@sammyshp.de>2011-10-04 13:50:04 +0200
committerSammysHP <sven@sammyshp.de>2011-10-04 13:50:04 +0200
commit298cecc5c5776acf9443755280dad3c70a0764c6 (patch)
tree5559d8a748d4d5fc659d14286d0045987f2fc1b6
parent4a537c3e1b0f73dbf3bae675e56d889d5c352903 (diff)
downloadcgeo-298cecc5c5776acf9443755280dad3c70a0764c6.zip
cgeo-298cecc5c5776acf9443755280dad3c70a0764c6.tar.gz
cgeo-298cecc5c5776acf9443755280dad3c70a0764c6.tar.bz2
Add verbose cache-loading
-rw-r--r--main/res/values-de/strings.xml7
-rw-r--r--main/res/values/strings.xml7
-rw-r--r--main/src/cgeo/geocaching/cgBase.java31
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java2
-rw-r--r--main/src/cgeo/geocaching/cgeodetail.java62
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java4
-rw-r--r--main/src/cgeo/geocaching/connector/GCConnector.java25
-rw-r--r--main/src/cgeo/geocaching/connector/IConnector.java22
-rw-r--r--main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java4
9 files changed, 113 insertions, 51 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index 01b7467..69fe98f 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -514,6 +514,13 @@
<string name="cache_hint">Hinweis</string>
<string name="cache_logs">Logbuch</string>
<string name="cache_dialog_loading_details">Lade Cache-Details…</string>
+ <string name="cache_dialog_loading_details_status_loadpage">Lade Seite</string>
+ <string name="cache_dialog_loading_details_status_details">Verarbeite Details</string>
+ <string name="cache_dialog_loading_details_status_spoilers">Lade Hinweisbilder</string>
+ <string name="cache_dialog_loading_details_status_logs">Lade Logs</string>
+ <string name="cache_dialog_loading_details_status_waypoints">Verarbeite Wegpunkte</string>
+ <string name="cache_dialog_loading_details_status_gcvote">Lade GCVote</string>
+ <string name="cache_dialog_loading_details_status_render">Generiere Ansicht</string>
<string name="cache_dialog_loading_description">Lade Cache-Beschreibung…</string>
<string name="cache_dialog_offline_save_title">Offline-Verwendung</string>
<string name="cache_dialog_offline_save_message">Speichere Cache für Offline-Verwendung…</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index f1bd6d5..c49f6b7 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -525,6 +525,13 @@
<string name="cache_hint">Hint</string>
<string name="cache_logs">Logbook</string>
<string name="cache_dialog_loading_details">Loading cache details…</string>
+ <string name="cache_dialog_loading_details_status_loadpage">Loading page</string>
+ <string name="cache_dialog_loading_details_status_details">Processing details</string>
+ <string name="cache_dialog_loading_details_status_spoilers">Loading spoiler images</string>
+ <string name="cache_dialog_loading_details_status_logs">Loading logs</string>
+ <string name="cache_dialog_loading_details_status_waypoints">Processing waypoints</string>
+ <string name="cache_dialog_loading_details_status_gcvote">Loading GCVote</string>
+ <string name="cache_dialog_loading_details_status_render">Render view</string>
<string name="cache_dialog_loading_description">Loading cache description…</string>
<string name="cache_dialog_offline_save_title">Offline</string>
<string name="cache_dialog_offline_save_message">Saving cache for offline use…</string>
diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java
index 20f29e2..ef17958 100644
--- a/main/src/cgeo/geocaching/cgBase.java
+++ b/main/src/cgeo/geocaching/cgBase.java
@@ -217,6 +217,8 @@ public class cgBase {
private static final int NB_DOWNLOAD_RETRIES = 4;
+ public static final int UPDATE_LOAD_PROGRESS_DETAIL = 42186;
+
public cgBase(cgeoapplication appIn) {
context = appIn.getBaseContext();
res = appIn.getBaseContext().getResources();
@@ -1056,7 +1058,11 @@ public class cgBase {
return caches;
}
- public cgCacheWrap parseCache(String page, int reason) {
+ public cgCacheWrap parseCache(final String page, final int reason, final Handler handler) {
+ if (null != handler) {
+ handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_details)).sendToTarget();
+ }
+
if (StringUtils.isBlank(page)) {
Log.e(Settings.tag, "cgeoBase.parseCache: No page given");
return null;
@@ -1287,6 +1293,10 @@ public class cgBase {
try {
final Matcher matcherSpoilers = patternSpoilers.matcher(page);
if (matcherSpoilers.find()) {
+ if (null != handler) {
+ handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_spoilers)).sendToTarget();
+ }
+
final Matcher matcherSpoilersInside = patternSpoilersInside.matcher(matcherSpoilers.group(1));
while (matcherSpoilersInside.find()) {
@@ -1374,6 +1384,9 @@ public class cgBase {
}
// cache logs
+ if (null != handler) {
+ handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_logs)).sendToTarget();
+ }
loadLogsFromDetails(page, cache);
int wpBegin = 0;
@@ -1381,6 +1394,10 @@ public class cgBase {
wpBegin = page.indexOf("<table class=\"Table\" id=\"ctl00_ContentBody_Waypoints\">");
if (wpBegin != -1) { // parse waypoints
+ if (null != handler) {
+ handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_waypoints)).sendToTarget();
+ }
+
final Pattern patternWpType = Pattern.compile("\\/wpttypes\\/sm\\/(.+)\\.jpg", Pattern.CASE_INSENSITIVE);
final Pattern patternWpPrefixOrLookupOrLatlon = Pattern.compile(">([^<]*<[^>]+>)?([^<]+)(<[^>]+>[^<]*)?<\\/td>", Pattern.CASE_INSENSITIVE);
final Pattern patternWpName = Pattern.compile(">[^<]*<a[^>]+>([^<]*)<\\/a>", Pattern.CASE_INSENSITIVE);
@@ -1506,6 +1523,10 @@ public class cgBase {
cache.elevation = getElevation(cache.coords);
}
+ if (null != handler) {
+ handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_gcvote)).sendToTarget();
+ }
+
final cgRating rating = GCVote.getRating(cache.guid, cache.geocode);
if (rating != null) {
cache.rating = rating.rating;
@@ -2207,7 +2228,7 @@ public class cgBase {
return searchId;
}
- public UUID searchByGeocode(final String geocode, final String guid, final int reason, final boolean forceReload) {
+ public UUID searchByGeocode(final String geocode, final String guid, final int reason, final boolean forceReload, final Handler handler) {
final cgSearch search = new cgSearch();
if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) {
@@ -2230,7 +2251,7 @@ public class cgBase {
return search.getCurrentId();
}
- return ConnectorFactory.getConnector(geocode).searchByGeocode(this, geocode, guid, app, search, reason);
+ return ConnectorFactory.getConnector(geocode).searchByGeocode(this, geocode, guid, app, search, reason, handler);
}
public UUID searchByOffline(final Geopoint coords, final String cacheType, final int list) {
@@ -3127,11 +3148,11 @@ public class cgBase {
if (cache != null) {
// only reload the cache, if it was already stored or has not all details (by checking the description)
if (cache.reason > 0 || StringUtils.isBlank(cache.getDescription())) {
- final UUID searchId = searchByGeocode(cache.geocode, null, listId, false);
+ final UUID searchId = searchByGeocode(cache.geocode, null, listId, false, null);
cache = app.getCache(searchId);
}
} else if (StringUtils.isNotBlank(geocode)) {
- final UUID searchId = searchByGeocode(geocode, null, listId, false);
+ final UUID searchId = searchByGeocode(geocode, null, listId, false, null);
cache = app.getCache(searchId);
}
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 02554d5..536a013 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -1290,7 +1290,7 @@ public class cgeocaches extends AbstractListActivity {
if (cache != null) {
// create a searchId for a single cache (as if in details view)
- final UUID singleSearchId = base.searchByGeocode(cache.geocode, null, 0, false);
+ final UUID singleSearchId = base.searchByGeocode(cache.geocode, null, 0, false, null);
if (NavigationAppFactory.onMenuItemSelected(item, geo, this,
res, cache, singleSearchId, null, null)) {
diff --git a/main/src/cgeo/geocaching/cgeodetail.java b/main/src/cgeo/geocaching/cgeodetail.java
index 1d47e7d..51ae366 100644
--- a/main/src/cgeo/geocaching/cgeodetail.java
+++ b/main/src/cgeo/geocaching/cgeodetail.java
@@ -171,31 +171,43 @@ public class cgeodetail extends AbstractActivity {
private Handler loadCacheHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
- if (searchId == null) {
- showToast(res.getString(R.string.err_dwld_details_failed));
+ if (cgBase.UPDATE_LOAD_PROGRESS_DETAIL == msg.what) {
+ if (waitDialog != null
+ && waitDialog.isShowing()
+ && msg.obj instanceof String) {
+ waitDialog.setMessage(res.getString(R.string.cache_dialog_loading_details)
+ + "\n\n"
+ + (String) msg.obj);
+ }
+ } else {
+ if (searchId == null) {
+ showToast(res.getString(R.string.err_dwld_details_failed));
- finish();
- return;
- }
+ finish();
+ return;
+ }
- if (app.getError(searchId) != null) {
- showToast(res.getString(R.string.err_dwld_details_failed_reason) + " " + app.getError(searchId) + ".");
+ if (app.getError(searchId) != null) {
+ showToast(res.getString(R.string.err_dwld_details_failed_reason) + " " + app.getError(searchId) + ".");
- finish();
- return;
- }
+ finish();
+ return;
+ }
- setView();
+ this.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_render)).sendToTarget();
- if (Settings.isAutoLoadDescription()) {
- try {
- loadLongDesc();
- } catch (Exception e) {
- // activity is not visible
+ setView();
+
+ if (Settings.isAutoLoadDescription()) {
+ try {
+ loadLongDesc();
+ } catch (Exception e) {
+ // activity is not visible
+ }
}
- }
- (new loadMapPreview(loadMapPreviewHandler)).start();
+ (new loadMapPreview(loadMapPreviewHandler)).start();
+ }
}
};
@@ -381,13 +393,12 @@ public class cgeodetail extends AbstractActivity {
try {
if (StringUtils.isNotBlank(name)) {
- waitDialog = ProgressDialog.show(this, name, res.getString(R.string.cache_dialog_loading_details), true);
+ waitDialog = ProgressDialog.show(this, name, res.getString(R.string.cache_dialog_loading_details), true, true);
} else if (StringUtils.isNotBlank(geocode)) {
- waitDialog = ProgressDialog.show(this, geocode.toUpperCase(), res.getString(R.string.cache_dialog_loading_details), true);
+ waitDialog = ProgressDialog.show(this, geocode.toUpperCase(), res.getString(R.string.cache_dialog_loading_details), true, true);
} else {
- waitDialog = ProgressDialog.show(this, res.getString(R.string.cache), res.getString(R.string.cache_dialog_loading_details), true);
+ waitDialog = ProgressDialog.show(this, res.getString(R.string.cache), res.getString(R.string.cache_dialog_loading_details), true, true);
}
- waitDialog.setCancelable(true);
} catch (Exception e) {
// nothing, we lost the window
}
@@ -612,8 +623,9 @@ public class cgeodetail extends AbstractActivity {
cache = app.getCache(searchId);
if (cache == null) {
- if (waitDialog != null && waitDialog.isShowing())
+ if (waitDialog != null && waitDialog.isShowing()) {
waitDialog.dismiss();
+ }
if (StringUtils.isNotBlank(geocode)) {
showToast(res.getString(R.string.err_detail_cache_find) + " " + geocode + ".");
@@ -1327,7 +1339,7 @@ public class cgeodetail extends AbstractActivity {
if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) {
return;
}
- searchId = base.searchByGeocode(geocode, StringUtils.isBlank(geocode) ? guid : null, 0, false);
+ searchId = base.searchByGeocode(geocode, StringUtils.isBlank(geocode) ? guid : null, 0, false, handler);
handler.sendMessage(new Message());
}
}
@@ -1742,7 +1754,7 @@ public class cgeodetail extends AbstractActivity {
@Override
public void run() {
app.removeCacheFromCache(geocode);
- searchId = base.searchByGeocode(cache.geocode, null, 0, true);
+ searchId = base.searchByGeocode(cache.geocode, null, 0, true, null);
handler.sendEmptyMessage(0);
}
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index 54fab87..6ea450d 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -5,6 +5,8 @@ import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgSearch;
import cgeo.geocaching.cgeoapplication;
+import android.os.Handler;
+
import java.util.UUID;
public abstract class AbstractConnector implements IConnector {
@@ -45,7 +47,7 @@ public abstract class AbstractConnector implements IConnector {
}
@Override
- public UUID searchByGeocode(cgBase base, String geocode, String guid, cgeoapplication app, cgSearch search, int reason) {
+ public UUID searchByGeocode(cgBase base, String geocode, String guid, cgeoapplication app, cgSearch search, int reason, Handler handler) {
return null;
}
}
diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java
index ea4ca45..b453511 100644
--- a/main/src/cgeo/geocaching/connector/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/GCConnector.java
@@ -1,15 +1,18 @@
package cgeo.geocaching.connector;
import cgeo.geocaching.Parameters;
+import cgeo.geocaching.R;
+import cgeo.geocaching.Settings;
import cgeo.geocaching.cgBase;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgCacheWrap;
import cgeo.geocaching.cgSearch;
-import cgeo.geocaching.Settings;
import cgeo.geocaching.cgeoapplication;
import org.apache.commons.lang3.StringUtils;
+import android.content.res.Resources;
+import android.os.Handler;
import android.util.Log;
import java.util.ArrayList;
@@ -65,7 +68,7 @@ public class GCConnector extends AbstractConnector implements IConnector {
}
@Override
- public UUID searchByGeocode(final cgBase base, String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason) {
+ public UUID searchByGeocode(final cgBase base, String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final Handler handler) {
final Parameters params = new Parameters("decrypt", "y");
if (StringUtils.isNotBlank(geocode)) {
params.put("wp", geocode);
@@ -73,6 +76,17 @@ public class GCConnector extends AbstractConnector implements IConnector {
params.put("guid", guid);
}
+ if (app == null) {
+ Log.e(Settings.tag, "cgeoBase.searchByGeocode: No application found");
+ return null;
+ }
+
+ final Resources res = app.getResources();
+
+ if (null != handler) {
+ handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_loadpage)).sendToTarget();
+ }
+
String page = base.requestLogged("http://www.geocaching.com/seek/cache_details.aspx", params, false, false, false);
if (StringUtils.isEmpty(page)) {
@@ -99,7 +113,7 @@ public class GCConnector extends AbstractConnector implements IConnector {
return null;
}
- final cgCacheWrap caches = base.parseCache(page, reason);
+ final cgCacheWrap caches = base.parseCache(page, reason, handler);
if (caches == null || caches.cacheList == null || caches.cacheList.isEmpty()) {
if (caches != null && StringUtils.isNotBlank(caches.error)) {
search.error = caches.error;
@@ -114,11 +128,6 @@ public class GCConnector extends AbstractConnector implements IConnector {
return null;
}
- if (app == null) {
- Log.e(Settings.tag, "cgeoBase.searchByGeocode: No application found");
- return null;
- }
-
List<cgCache> cacheList = cgBase.processSearchResults(search, caches, false, false, null);
app.addSearch(search, cacheList, true, reason);
diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java
index 07ae43e..68c9db6 100644
--- a/main/src/cgeo/geocaching/connector/IConnector.java
+++ b/main/src/cgeo/geocaching/connector/IConnector.java
@@ -5,19 +5,21 @@ import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgSearch;
import cgeo.geocaching.cgeoapplication;
+import android.os.Handler;
+
import java.util.UUID;
public interface IConnector {
/**
* get name for display (currently only used in links)
- *
+ *
* @return
*/
public String getName();
/**
* return true, if this connector is responsible for the given cache
- *
+ *
* @param geocode
* @return
*/
@@ -27,7 +29,7 @@ public interface IConnector {
/**
* get browser URL for the given cache
- *
+ *
* @param cache
* @return
*/
@@ -35,28 +37,28 @@ public interface IConnector {
/**
* enable/disable watchlist controls in cache details
- *
+ *
* @return
*/
public boolean supportsWatchList();
/**
* enable/disable logging controls in cache details
- *
+ *
* @return
*/
public boolean supportsLogging();
/**
* get host name of the connector server for dynamic loading of data
- *
+ *
* @return
*/
public String getHost();
/**
* get cache data license text
- *
+ *
* @param cache
* @return
*/
@@ -64,17 +66,17 @@ public interface IConnector {
/**
* enable/disable user actions in cache details
- *
+ *
* @return
*/
public boolean supportsUserActions();
/**
* enable/disable "caches around" action in cache details
- *
+ *
* @return
*/
public boolean supportsCachesAround();
- public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason);
+ public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final Handler handler);
}
diff --git a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java
index 0773532..013fc18 100644
--- a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java
+++ b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java
@@ -9,6 +9,8 @@ import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.utils.CryptUtils;
+import android.os.Handler;
+
import java.util.List;
import java.util.UUID;
@@ -37,7 +39,7 @@ public class ApiOpenCachingConnector extends OpenCachingConnector implements ICo
}
@Override
- public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason) {
+ public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final Handler handler) {
final cgCache cache = OkapiClient.getCache(geocode);
if (cache == null) {
return null;