diff options
| author | rsudev <rasch@munin-soft.de> | 2013-07-28 12:48:32 +0200 |
|---|---|---|
| committer | rsudev <rasch@munin-soft.de> | 2013-07-28 13:35:22 +0200 |
| commit | 77e7e33e8956fa00b6e7f43be6c51177f4b6cf5b (patch) | |
| tree | ced5745ac67430f885909fcfcaa270584fa31749 /main/src | |
| parent | 8abfdd11cb19ddf6f3d3af5ab761e58a853cc465 (diff) | |
| download | cgeo-77e7e33e8956fa00b6e7f43be6c51177f4b6cf5b.zip cgeo-77e7e33e8956fa00b6e7f43be6c51177f4b6cf5b.tar.gz cgeo-77e7e33e8956fa00b6e7f43be6c51177f4b6cf5b.tar.bz2 | |
Finetuning fixes for #1851 and #3000 (cache merging)
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/Geocache.java | 90 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCMap.java | 3 |
2 files changed, 48 insertions, 45 deletions
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index 23a65c6..77efd7e 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -102,6 +102,7 @@ public class Geocache implements ICache, IWaypoint { private Boolean found = null; private Boolean favorite = null; private Boolean onWatchlist = null; + private Boolean logOffline = null; private int favoritePoints = 0; private float rating = 0; // valid ratings are larger than zero private int votes = 0; @@ -128,7 +129,6 @@ public class Geocache implements ICache, IWaypoint { }; private List<Trackable> inventory = null; private Map<LogType, Integer> logCounts = new HashMap<LogType, Integer>(); - private boolean logOffline = false; private boolean userModifiedCoords = false; // temporary values private boolean statusChecked = false; @@ -197,46 +197,37 @@ public class Geocache implements ICache, IWaypoint { detailed = other.detailed; detailedUpdate = other.detailedUpdate; coords = other.coords; - cacheType = other.cacheType; + // merge cache type only if really available from other + if (null != other.cacheType && CacheType.UNKNOWN != other.cacheType) { + cacheType = other.cacheType; + } zoomlevel = other.zoomlevel; // boolean values must be enumerated here. Other types are assigned outside this if-statement - // TODO: check whether a search or a live map systematically returns those, in which case - // we want to keep the most recent one instead of getting information from the previously - // stored data. This is the case for "archived" for example which has been taken out of this - // list. - if (other.premiumMembersOnly != null) { - premiumMembersOnly = other.premiumMembersOnly; - } reliableLatLon = other.reliableLatLon; - if (other.found != null) { - found = other.found; - } - if (other.disabled != null) { - disabled = other.disabled; - } - if (other.favorite != null) { - favorite = other.favorite; - } - if (other.archived != null) { - archived = other.archived; - } - if (other.onWatchlist != null) { - onWatchlist = other.onWatchlist; - } - logOffline = other.logOffline; finalDefined = other.finalDefined; } - /* - * No gathering for boolean members if other cache is not-detailed - * and does not have information with higher reliability (denoted by zoomlevel) - * - found - * - own - * - disabled - * - favorite - * - onWatchlist - * - logOffline - */ + if (premiumMembersOnly == null) { + premiumMembersOnly = other.premiumMembersOnly; + } + if (found == null) { + found = other.found; + } + if (disabled == null) { + disabled = other.disabled; + } + if (favorite == null) { + favorite = other.favorite; + } + if (archived == null) { + archived = other.archived; + } + if (onWatchlist == null) { + onWatchlist = other.onWatchlist; + } + if (logOffline == null) { + logOffline = other.logOffline; + } if (visitedDate == 0) { visitedDate = other.visitedDate; } @@ -421,7 +412,7 @@ public class Geocache implements ICache, IWaypoint { logs == other.logs && inventory == other.inventory && logCounts == other.logCounts && - logOffline == other.logOffline && + ObjectUtils.equals(logOffline, other.logOffline) && finalDefined == other.finalDefined; } @@ -496,7 +487,7 @@ public class Geocache implements ICache, IWaypoint { if (status) { ActivityMixin.showToast(fromActivity, res.getString(R.string.info_log_saved)); cgData.saveVisitDate(geocode); - logOffline = true; + logOffline = Boolean.TRUE; notifyChange(); } else { @@ -932,8 +923,25 @@ public class Geocache implements ICache, IWaypoint { return coords; } + /** + * Set reliable coordinates + * + * @param coords + */ public void setCoords(Geopoint coords) { this.coords = coords; + this.zoomlevel = Tile.ZOOMLEVEL_MAX + 1; + } + + /** + * Set unreliable coordinates from a certain map zoom level + * + * @param coords + * @param zoomlevel + */ + public void setCoords(Geopoint coords, int zoomlevel) { + this.coords = coords; + this.zoomlevel = zoomlevel; } /** @@ -1062,11 +1070,11 @@ public class Geocache implements ICache, IWaypoint { } public boolean isLogOffline() { - return logOffline; + return (logOffline != null && logOffline.booleanValue()); } public void setLogOffline(boolean logOffline) { - this.logOffline = logOffline; + this.logOffline = Boolean.valueOf(logOffline); } public boolean isStatusChecked() { @@ -1490,10 +1498,6 @@ public class Geocache implements ICache, IWaypoint { return this.zoomlevel; } - public void setZoomlevel(int zoomlevel) { - this.zoomlevel = zoomlevel; - } - @Override public int getId() { return 0; diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java index d243306..6a602a7 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCMap.java +++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java @@ -209,8 +209,7 @@ public class GCMap { cache.setReliableLatLon(false); cache.setGeocode(id); cache.setName(nameCache.get(id)); - cache.setZoomlevel(tile.getZoomlevel()); - cache.setCoords(tile.getCoord(xy)); + cache.setCoords(tile.getCoord(xy), tile.getZoomlevel()); if (strategy.flags.contains(StrategyFlag.PARSE_TILES) && bitmap != null) { for (UTFGridPosition singlePos : singlePositions.get(id)) { if (IconDecoder.parseMapPNG(cache, bitmap, singlePos, tile.getZoomlevel())) { |
