diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2013-05-18 20:08:58 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2013-05-18 21:02:15 +0200 |
| commit | 45c57ba2264bfc09d552cd2cc0e905f921fa76b0 (patch) | |
| tree | 808710754731f3a078b1f35417dac1f616dacbeb | |
| parent | 37c0049a5525e49d45ff69c671da900a8389816a (diff) | |
| download | cgeo-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.
| -rw-r--r-- | main/res/layout/caches_item.xml | 34 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConstants.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCParser.java | 9 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CacheListAdapter.java | 41 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/DirectionImage.java | 3 |
5 files changed, 32 insertions, 57 deletions
diff --git a/main/res/layout/caches_item.xml b/main/res/layout/caches_item.xml index e3b861c..8ea0221 100644 --- a/main/res/layout/caches_item.xml +++ b/main/res/layout/caches_item.xml @@ -75,15 +75,13 @@ <!-- real text based direction and distance --> <RelativeLayout - android:id="@+id/direction_layout" android:layout_width="78dip" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginBottom="1dip" android:layout_marginRight="30dip" - android:layout_marginTop="1dip" - android:visibility="gone" > + android:layout_marginTop="1dip" > <view android:id="@+id/distance" @@ -111,31 +109,21 @@ android:gravity="center" android:minHeight="28px" android:minWidth="28px" - cc:skin="?compass" /> - </RelativeLayout> - - <!-- image based direction and distance --> - - <RelativeLayout - android:id="@+id/dirimg_layout" - android:layout_width="78dip" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_centerVertical="true" - android:layout_marginBottom="1dip" - android:layout_marginRight="30dip" - android:layout_marginTop="1dip" - android:visibility="gone" > + cc:skin="?compass" + android:visibility="gone" /> <ImageView android:id="@+id/dirimg" - android:layout_width="55dip" - android:layout_height="30dip" - android:layout_centerInParent="true" + android:layout_width="78dip" + android:layout_height="28px" + android:layout_centerHorizontal="true" android:layout_gravity="center" + android:layout_marginTop="21dip" android:gravity="center" - android:scaleType="fitXY" - android:src="@null" /> + android:minHeight="28px" + android:minWidth="28px" + android:src="@null" + android:visibility="gone" /> </RelativeLayout> <!-- inventory and favorites --> 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)); } |
