aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2013-05-18 20:08:58 +0200
committerSamuel Tardieu <sam@rfc1149.net>2013-05-18 21:02:15 +0200
commit45c57ba2264bfc09d552cd2cc0e905f921fa76b0 (patch)
tree808710754731f3a078b1f35417dac1f616dacbeb /main/src
parent37c0049a5525e49d45ff69c671da900a8389816a (diff)
downloadcgeo-45c57ba2264bfc09d552cd2cc0e905f921fa76b0.zip
cgeo-45c57ba2264bfc09d552cd2cc0e905f921fa76b0.tar.gz
cgeo-45c57ba2264bfc09d552cd2cc0e905f921fa76b0.tar.bz2
fix #2733: acquire distance and direction for basic members
A recent change in geocaching.com way of presenting the distance and direction information for basic members requires a new parsing.
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConstants.java2
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java9
-rw-r--r--main/src/cgeo/geocaching/ui/CacheListAdapter.java41
-rw-r--r--main/src/cgeo/geocaching/ui/DirectionImage.java3
4 files changed, 21 insertions, 34 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java
index 98b5f1a..c916071 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java
@@ -117,7 +117,7 @@ public final class GCConstants {
public final static Pattern PATTERN_SEARCH_TRACKABLES = Pattern.compile("<a id=\"ctl00_ContentBody_dlResults_ctl[0-9]+_uxTravelBugList\" class=\"tblist\" data-tbcount=\"([0-9]+)\" data-id=\"[^\"]*\"[^>]*>(.*)</a>");
/** Second group used */
public final static Pattern PATTERN_SEARCH_TRACKABLESINSIDE = Pattern.compile("(<img src=\"[^\"]+\" alt=\"([^\"]+)\" title=\"[^\"]*\" />[^<]*)");
- public final static Pattern PATTERN_SEARCH_DIRECTION = Pattern.compile("<img id=\"ctl00_ContentBody_dlResults_ctl[0-9]+_uxDistanceAndHeading\" title=\"[^\"]*\" src=\"[^\"]*/seek/CacheDir\\.ashx\\?k=([^\"]+)\"[^>]*>");
+ public final static Pattern PATTERN_SEARCH_DIRECTION_DISTANCE = Pattern.compile("<img src=\"/images/icons/compass/([^\\.]+)\\.gif\"[^>]*>[^<]*<br />([^<]+)</span>");
public final static Pattern PATTERN_SEARCH_GEOCODE = Pattern.compile("\\|\\W*(GC[0-9A-Z]+)[^\\|]*\\|");
public final static Pattern PATTERN_SEARCH_ID = Pattern.compile("name=\"CID\"[^v]*value=\"([0-9]+)\"");
public final static Pattern PATTERN_SEARCH_FAVORITE = Pattern.compile("<span id=\"ctl00_ContentBody_dlResults_ctl[0-9]+_uxFavoritesValue\" title=\"[^\"]*\" class=\"favorite-rank\">([0-9]+)</span>");
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index da60060..c8a9cc2 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -166,7 +166,14 @@ public abstract class GCParser {
// cache direction - image
if (Settings.getLoadDirImg()) {
- cache.setDirectionImg(Network.decode(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION, true, 1, cache.getDirectionImg(), true)));
+ final String direction = BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION_DISTANCE, false, 1, null, false);
+ final String distance = BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION_DISTANCE, false, 2, null, false);
+ if (direction != null) {
+ cache.setDirectionImg(direction);
+ }
+ if (distance != null) {
+ cache.setDistance(DistanceParser.parseDistance(distance, Settings.isUseMetricUnits()));
+ }
}
// cache inventory
diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java
index 4965e0b..3e56c74 100644
--- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java
+++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java
@@ -39,7 +39,6 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
@@ -100,10 +99,8 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> {
TextView favourite;
TextView info;
ImageView inventory;
- RelativeLayout directionLayout;
DistanceView distance;
CompassMiniView direction;
- RelativeLayout dirImgLayout;
ImageView dirImg;
}
@@ -358,10 +355,8 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> {
holder.checkbox = (CheckBox) v.findViewById(R.id.checkbox);
holder.logStatusMark = (ImageView) v.findViewById(R.id.log_status_mark);
holder.text = (TextView) v.findViewById(R.id.text);
- holder.directionLayout = (RelativeLayout) v.findViewById(R.id.direction_layout);
holder.distance = (DistanceView) v.findViewById(R.id.distance);
holder.direction = (CompassMiniView) v.findViewById(R.id.direction);
- holder.dirImgLayout = (RelativeLayout) v.findViewById(R.id.dirimg_layout);
holder.dirImg = (ImageView) v.findViewById(R.id.dirimg);
holder.inventory = (ImageView) v.findViewById(R.id.inventory);
holder.favourite = (TextView) v.findViewById(R.id.favourite);
@@ -434,35 +429,23 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> {
holder.inventory.setVisibility(View.GONE);
}
- boolean setDiDi = false;
+ if (cache.getDistance() != null) {
+ holder.distance.setDistance(cache.getDistance());
+ }
if (cache.getCoords() != null) {
holder.direction.setVisibility(View.VISIBLE);
+ holder.dirImg.setVisibility(View.GONE);
holder.direction.updateAzimuth(azimuth);
if (coords != null) {
holder.distance.update(coords);
holder.direction.updateCurrentCoords(coords);
}
- setDiDi = true;
- } else {
- if (cache.getDistance() != null) {
- holder.distance.setDistance(cache.getDistance());
- setDiDi = true;
- }
- if (cache.getDirection() != null) {
- holder.direction.setVisibility(View.VISIBLE);
- holder.direction.updateAzimuth(azimuth);
- holder.direction.updateHeading(cache.getDirection());
- setDiDi = true;
- }
- }
-
- if (setDiDi) {
- holder.directionLayout.setVisibility(View.VISIBLE);
- holder.dirImgLayout.setVisibility(View.GONE);
+ } else if (cache.getDirection() != null) {
+ holder.direction.setVisibility(View.VISIBLE);
+ holder.dirImg.setVisibility(View.GONE);
+ holder.direction.updateAzimuth(azimuth);
+ holder.direction.updateHeading(cache.getDirection());
} else {
- holder.directionLayout.setVisibility(View.GONE);
- holder.distance.clear();
-
final Bitmap dirImgPre = BitmapFactory.decodeFile(DirectionImage.getDirectionFile(cache.getGeocode(), false).getPath());
final Bitmap dirImg;
if (dirImgPre != null) { // null happens for invalid caches (not yet released)
@@ -487,10 +470,8 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> {
}
holder.dirImg.setImageBitmap(dirImg);
- holder.dirImgLayout.setVisibility(View.VISIBLE);
- } else {
- holder.dirImg.setImageBitmap(null);
- holder.dirImgLayout.setVisibility(View.GONE);
+ holder.dirImg.setVisibility(View.VISIBLE);
+ holder.direction.setVisibility(View.GONE);
}
}
diff --git a/main/src/cgeo/geocaching/ui/DirectionImage.java b/main/src/cgeo/geocaching/ui/DirectionImage.java
index 675d73b..98b8767 100644
--- a/main/src/cgeo/geocaching/ui/DirectionImage.java
+++ b/main/src/cgeo/geocaching/ui/DirectionImage.java
@@ -2,7 +2,6 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.files.LocalStorage;
import cgeo.geocaching.network.Network;
-import cgeo.geocaching.network.Parameters;
import ch.boye.httpclientandroidlib.HttpResponse;
import org.apache.commons.lang3.StringUtils;
@@ -17,7 +16,7 @@ public class DirectionImage {
}
final HttpResponse httpResponse =
- Network.getRequest("http://www.geocaching.com/ImgGen/seek/CacheDir.ashx", new Parameters("k", code));
+ Network.getRequest("http://www.geocaching.com/images/icons/compass/" + code + ".gif");
if (httpResponse != null) {
LocalStorage.saveEntityToFile(httpResponse, getDirectionFile(geocode, true));
}