aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2011-09-09 22:41:57 +0200
committerSamuel Tardieu <sam@rfc1149.net>2011-09-09 22:45:17 +0200
commitd01ff869025c5d83f438f04fca6bbf19bbfc5ce5 (patch)
treec1ed669cda1165b6be4a689f25d07cc4ece35d5d
parent820ba2f83ddd488bc5809ce31cf0a718143a1419 (diff)
parent09dd423be6c182d434aa3e20330ee1866a0b0aef (diff)
downloadcgeo-d01ff869025c5d83f438f04fca6bbf19bbfc5ce5.zip
cgeo-d01ff869025c5d83f438f04fca6bbf19bbfc5ce5.tar.gz
cgeo-d01ff869025c5d83f438f04fca6bbf19bbfc5ce5.tar.bz2
Merge branch 'master' into use-geopoint-391
Conflicts: src/cgeo/geocaching/cgData.java
-rw-r--r--src/cgeo/geocaching/cgBase.java31
-rw-r--r--src/cgeo/geocaching/cgCache.java26
-rw-r--r--src/cgeo/geocaching/cgData.java278
-rw-r--r--src/cgeo/geocaching/cgeoapplication.java39
-rw-r--r--src/cgeo/geocaching/cgeopoint.java5
5 files changed, 184 insertions, 195 deletions
diff --git a/src/cgeo/geocaching/cgBase.java b/src/cgeo/geocaching/cgBase.java
index e0268f8..f06ac03 100644
--- a/src/cgeo/geocaching/cgBase.java
+++ b/src/cgeo/geocaching/cgBase.java
@@ -1290,20 +1290,7 @@ public class cgBase {
}
// cache found
- try
- {
- final Matcher matcherFound = patternFound.matcher(page);
- final Matcher matcherFoundAlternative = patternFoundAlternative.matcher(page);
-
- if (matcherFound.find() || matcherFoundAlternative.find()) {
- cache.found = true;
- }
- }
- catch (Exception e)
- {
- // failed to parse found
- Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse found");
- }
+ cache.found = patternFound.matcher(page).find() || patternFoundAlternative.matcher(page).find();
// cache type
try {
@@ -4998,7 +4985,6 @@ public class cgBase {
* Generate a time string according to system-wide settings (locale, 12/24 hour)
* such as "13:24".
*
- * @param context a context
* @param date milliseconds since the epoch
* @return the formatted string
*/
@@ -5010,7 +4996,6 @@ public class cgBase {
* Generate a date string according to system-wide settings (locale, date format)
* such as "20 December" or "20 December 2010". The year will only be included when necessary.
*
- * @param context a context
* @param date milliseconds since the epoch
* @return the formatted string
*/
@@ -5023,7 +5008,6 @@ public class cgBase {
* such as "20 December 2010". The year will always be included, making it suitable
* to generate long-lived log entries.
*
- * @param context a context
* @param date milliseconds since the epoch
* @return the formatted string
*/
@@ -5035,7 +5019,6 @@ public class cgBase {
* Generate a numeric date string according to system-wide settings (locale, date format)
* such as "10/20/2010".
*
- * @param context a context
* @param date milliseconds since the epoch
* @return the formatted string
*/
@@ -5044,6 +5027,18 @@ public class cgBase {
}
/**
+ * Generate a numeric date and time string according to system-wide settings (locale,
+ * date format) such as "7 sept. à 12:35".
+ *
+ * @param context a Context
+ * @param date milliseconds since the epoch
+ * @return the formatted string
+ */
+ public static String formatShortDateTime(Context context, long date) {
+ return DateUtils.formatDateTime(context, date, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL);
+ }
+
+ /**
* TODO This method is only needed until the settings are a singleton
* @return
*/
diff --git a/src/cgeo/geocaching/cgCache.java b/src/cgeo/geocaching/cgCache.java
index 56505e6..f065008 100644
--- a/src/cgeo/geocaching/cgCache.java
+++ b/src/cgeo/geocaching/cgCache.java
@@ -84,31 +84,7 @@ public class cgCache implements ICache {
public boolean statusCheckedView = false;
public String directionImg = null;
- public cgCache merge(cgData storage) {
-
- boolean loadA = true;
- boolean loadW = true;
- boolean loadS = true;
- boolean loadL = true;
- boolean loadI = true;
-
- if (attributes == null || attributes.isEmpty()) {
- loadA = false;
- }
- if (waypoints == null || waypoints.isEmpty()) {
- loadW = false;
- }
- if (spoilers == null || spoilers.isEmpty()) {
- loadS = false;
- }
- if (logs == null || logs.isEmpty()) {
- loadL = false;
- }
- if (inventory == null || inventory.isEmpty()) {
- loadI = false;
- }
-
- final cgCache oldCache = storage.loadCache(geocode, guid, loadA, loadW, loadS, loadL, loadI, false);
+ public cgCache merge(cgData storage, cgCache oldCache) {
if (oldCache == null) {
return this;
diff --git a/src/cgeo/geocaching/cgData.java b/src/cgeo/geocaching/cgData.java
index 9329ff2..940ef09 100644
--- a/src/cgeo/geocaching/cgData.java
+++ b/src/cgeo/geocaching/cgData.java
@@ -35,6 +35,13 @@ import cgeo.geocaching.utils.CollectionUtils;
public class cgData {
+ /**The list of fields needed for mapping.*/
+ private static final String[] CACHE_COLUMNS = new String[]{
+ "_id", "updated", "reason", "detailed", "detailedupdate", "visiteddate", "geocode", "cacheid", "guid", "type", "name", "own", "owner", "owner_real", "hidden", "hint", "size",
+ "difficulty", "distance", "direction", "terrain", "latlon", "latitude_string", "longitude_string", "location", "latitude", "longitude", "elevation", "shortdesc",
+ "description", "favourite_cnt", "rating", "votes", "myvote", "disabled", "archived", "members", "found", "favourite", "inventorycoins", "inventorytags",
+ "inventoryunknown", "onWatchlist", "personal_note", "reliable_latlon"
+ };
public cgCacheWrap caches;
private Context context = null;
private String path = null;
@@ -1016,6 +1023,8 @@ public class cgData {
}
}
+
+ @Deprecated
public boolean isReliableLatLon(String geocode, String guid) {
init();
@@ -1196,7 +1205,7 @@ public class cgData {
values.put("distance", cache.distance);
values.put("direction", cache.direction);
// save coordinates
- final boolean rel = isReliableLatLon(cache.geocode, cache.guid);
+ final boolean rel = cache.reliableLatLon;
if (cache.reliableLatLon) { // new cache has reliable coordinates, store
values.put("latitude", cache.coords.getLatitude());
values.put("longitude", cache.coords.getLongitude());
@@ -1713,6 +1722,19 @@ public class cgData {
return loadCache(geocode, guid, false, true, false, false, false, false);
}
+ /**
+ * Loads a single Cache.
+ * @param geocode The Geocode GCXXXX
+ * @param guid
+ * @param loadA
+ * @param loadW
+ * @param loadS
+ * @param loadL
+ * @param loadI
+ * @param loadO
+ * @return the loaded cache
+ */
+
public cgCache loadCache(String geocode, String guid, boolean loadA, boolean loadW, boolean loadS, boolean loadL, boolean loadI, boolean loadO) {
Object[] geocodes = new Object[1];
Object[] guids = new Object[1];
@@ -1729,7 +1751,7 @@ public class cgData {
guids = null;
}
- List<cgCache> caches = loadCaches(geocodes, guids, null, null, null, null, loadA, loadW, loadS, loadL, loadI, loadO);
+ List<cgCache> caches = loadCaches(geocodes, null, null, null, null, null, loadA, loadW, loadS, loadL, loadI, loadO);
if (caches != null && caches.isEmpty() == false) {
return caches.get(0);
}
@@ -1751,7 +1773,17 @@ public class cgData {
public List<cgCache> loadCaches(Object[] geocodes, Object[] guids, Long centerLat, Long centerLon, Long spanLat, Long spanLon, boolean loadA, boolean loadW, boolean loadS, boolean loadL, boolean loadI, boolean loadO) {
init();
-
+// Using more than one of the parametersets results in overly comlex wheres
+ if (((geocodes != null && geocodes.length > 0) && (guids != null && guids.length > 0))) {
+ throw new IllegalArgumentException("Please use only one parameter");
+ }
+ if (((geocodes != null && geocodes.length > 0) || (guids != null && guids.length > 0))
+ && centerLat != null
+ && centerLon != null
+ && spanLat != null
+ && spanLon != null) {
+ throw new IllegalArgumentException("Please use only one parameter");
+ }
StringBuilder where = new StringBuilder();
Cursor cursor = null;
List<cgCache> caches = new ArrayList<cgCache>();
@@ -1827,15 +1859,9 @@ public class cgData {
where.append(String.format((Locale) null, "%.6f", lonMax));
where.append(')');
}
-
cursor = databaseRO.query(
dbTableCaches,
- new String[]{
- "_id", "updated", "reason", "detailed", "detailedupdate", "visiteddate", "geocode", "cacheid", "guid", "type", "name", "own", "owner", "owner_real", "hidden", "hint", "size",
- "difficulty", "distance", "direction", "terrain", "latlon", "latitude_string", "longitude_string", "location", "latitude", "longitude", "elevation", "shortdesc",
- "description", "favourite_cnt", "rating", "votes", "myvote", "disabled", "archived", "members", "found", "favourite", "inventorycoins", "inventorytags",
- "inventoryunknown", "onWatchlist", "personal_note"
- },
+ CACHE_COLUMNS,
where.toString(),
null,
null,
@@ -1844,77 +1870,12 @@ public class cgData {
null);
if (cursor != null) {
- int index = 0;
-
if (cursor.getCount() > 0) {
cursor.moveToFirst();
do {
- cgCache cache = new cgCache();
-
- cache.updated = (long) cursor.getLong(cursor.getColumnIndex("updated"));
- cache.reason = (int) cursor.getInt(cursor.getColumnIndex("reason"));
- cache.detailed = cursor.getInt(cursor.getColumnIndex("detailed")) == 1;
- cache.detailedUpdate = (Long) cursor.getLong(cursor.getColumnIndex("detailedupdate"));
- cache.visitedDate = (Long) cursor.getLong(cursor.getColumnIndex("visiteddate"));
- cache.geocode = (String) cursor.getString(cursor.getColumnIndex("geocode"));
- cache.cacheid = (String) cursor.getString(cursor.getColumnIndex("cacheid"));
- cache.guid = (String) cursor.getString(cursor.getColumnIndex("guid"));
- cache.type = (String) cursor.getString(cursor.getColumnIndex("type"));
- cache.name = (String) cursor.getString(cursor.getColumnIndex("name"));
- cache.own = cursor.getInt(cursor.getColumnIndex("own")) == 1;
- cache.owner = (String) cursor.getString(cursor.getColumnIndex("owner"));
- cache.ownerReal = (String) cursor.getString(cursor.getColumnIndex("owner_real"));
- cache.hidden = new Date((long) cursor.getLong(cursor.getColumnIndex("hidden")));
- cache.hint = (String) cursor.getString(cursor.getColumnIndex("hint"));
- cache.size = (String) cursor.getString(cursor.getColumnIndex("size"));
- cache.difficulty = (Float) cursor.getFloat(cursor.getColumnIndex("difficulty"));
- index = cursor.getColumnIndex("direction");
- if (cursor.isNull(index)) {
- cache.direction = null;
- } else {
- cache.direction = (Double) cursor.getDouble(index);
- }
- index = cursor.getColumnIndex("distance");
- if (cursor.isNull(index)) {
- cache.distance = null;
- } else {
- cache.distance = (Double) cursor.getDouble(index);
- }
- cache.terrain = (Float) cursor.getFloat(cursor.getColumnIndex("terrain"));
- cache.latlon = (String) cursor.getString(cursor.getColumnIndex("latlon"));
- cache.latitudeString = (String) cursor.getString(cursor.getColumnIndex("latitude_string"));
- cache.longitudeString = (String) cursor.getString(cursor.getColumnIndex("longitude_string"));
- cache.location = (String) cursor.getString(cursor.getColumnIndex("location"));
-
- final int indexLat = cursor.getColumnIndex("latitude");
- final int indexLon = cursor.getColumnIndex("longitude");
- if (cursor.isNull(indexLat) || cursor.isNull(indexLon)) {
- cache.coords = null;
- } else {
- cache.coords = new Geopoint(cursor.getDouble(indexLat), cursor.getDouble(indexLon));;
- }
-
- index = cursor.getColumnIndex("elevation");
- if (cursor.isNull(index)) {
- cache.elevation = null;
- } else {
- cache.elevation = (Double) cursor.getDouble(index);
- }
- cache.personalNote = (String) cursor.getString(cursor.getColumnIndex("personal_note"));
- cache.shortdesc = (String) cursor.getString(cursor.getColumnIndex("shortdesc"));
- cache.description = (String) cursor.getString(cursor.getColumnIndex("description"));
- cache.favouriteCnt = (Integer) cursor.getInt(cursor.getColumnIndex("favourite_cnt"));
- cache.rating = (Float) cursor.getFloat(cursor.getColumnIndex("rating"));
- cache.votes = (Integer) cursor.getInt(cursor.getColumnIndex("votes"));
- cache.myVote = (Float) cursor.getFloat(cursor.getColumnIndex("myvote"));
- cache.disabled = cursor.getLong(cursor.getColumnIndex("disabled")) == 1L;
- cache.archived = cursor.getLong(cursor.getColumnIndex("archived")) == 1L;
- cache.members = cursor.getLong(cursor.getColumnIndex("members")) == 1L;
- cache.found = cursor.getLong(cursor.getColumnIndex("found")) == 1L;
- cache.favourite = cursor.getLong(cursor.getColumnIndex("favourite")) == 1L;
- cache.inventoryItems = (Integer) cursor.getInt(cursor.getColumnIndex("inventoryunknown"));
- cache.onWatchlist = cursor.getLong(cursor.getColumnIndex("onWatchlist")) == 1L;
+ //Extracted Method
+ cgCache cache = createCacheFromDatabaseContent(cursor);
if (loadA) {
List<String> attributes = loadAttributes(cache.geocode);
@@ -2001,6 +1962,81 @@ public class cgData {
return caches;
}
+ /**
+ * maps a Cache from the cursor. Doesn't next.
+ * @param cursor
+ * @return
+ */
+
+ private static cgCache createCacheFromDatabaseContent(Cursor cursor) {
+ int index;
+ cgCache cache = new cgCache();
+
+ cache.updated = (long) cursor.getLong(cursor.getColumnIndex("updated"));
+ cache.reason = (int) cursor.getInt(cursor.getColumnIndex("reason"));
+ cache.detailed = cursor.getInt(cursor.getColumnIndex("detailed")) == 1;
+ cache.detailedUpdate = (Long) cursor.getLong(cursor.getColumnIndex("detailedupdate"));
+ cache.visitedDate = (Long) cursor.getLong(cursor.getColumnIndex("visiteddate"));
+ cache.geocode = (String) cursor.getString(cursor.getColumnIndex("geocode"));
+ cache.cacheid = (String) cursor.getString(cursor.getColumnIndex("cacheid"));
+ cache.guid = (String) cursor.getString(cursor.getColumnIndex("guid"));
+ cache.type = (String) cursor.getString(cursor.getColumnIndex("type"));
+ cache.name = (String) cursor.getString(cursor.getColumnIndex("name"));
+ cache.own = cursor.getInt(cursor.getColumnIndex("own")) == 1;
+ cache.owner = (String) cursor.getString(cursor.getColumnIndex("owner"));
+ cache.ownerReal = (String) cursor.getString(cursor.getColumnIndex("owner_real"));
+ cache.hidden = new Date((long) cursor.getLong(cursor.getColumnIndex("hidden")));
+ cache.hint = (String) cursor.getString(cursor.getColumnIndex("hint"));
+ cache.size = (String) cursor.getString(cursor.getColumnIndex("size"));
+ cache.difficulty = (Float) cursor.getFloat(cursor.getColumnIndex("difficulty"));
+ index = cursor.getColumnIndex("direction");
+ if (cursor.isNull(index)) {
+ cache.direction = null;
+ } else {
+ cache.direction = (Double) cursor.getDouble(index);
+ }
+ index = cursor.getColumnIndex("distance");
+ if (cursor.isNull(index)) {
+ cache.distance = null;
+ } else {
+ cache.distance = (Double) cursor.getDouble(index);
+ }
+ cache.terrain = (Float) cursor.getFloat(cursor.getColumnIndex("terrain"));
+ cache.latlon = (String) cursor.getString(cursor.getColumnIndex("latlon"));
+ cache.latitudeString = (String) cursor.getString(cursor.getColumnIndex("latitude_string"));
+ cache.longitudeString = (String) cursor.getString(cursor.getColumnIndex("longitude_string"));
+ cache.location = (String) cursor.getString(cursor.getColumnIndex("location"));
+ final int indexLat = cursor.getColumnIndex("latitude");
+ final int indexLon = cursor.getColumnIndex("longitude");
+ if (cursor.isNull(indexLat) || cursor.isNull(indexLon)) {
+ cache.coords = null;
+ } else {
+ cache.coords = new Geopoint(cursor.getDouble(indexLat), cursor.getDouble(indexLon));
+ }
+ index = cursor.getColumnIndex("elevation");
+ if (cursor.isNull(index)) {
+ cache.elevation = null;
+ } else {
+ cache.elevation = (Double) cursor.getDouble(index);
+ }
+ cache.personalNote = (String) cursor.getString(cursor.getColumnIndex("personal_note"));
+ cache.shortdesc = (String) cursor.getString(cursor.getColumnIndex("shortdesc"));
+ cache.description = (String) cursor.getString(cursor.getColumnIndex("description"));
+ cache.favouriteCnt = (Integer) cursor.getInt(cursor.getColumnIndex("favourite_cnt"));
+ cache.rating = (Float) cursor.getFloat(cursor.getColumnIndex("rating"));
+ cache.votes = (Integer) cursor.getInt(cursor.getColumnIndex("votes"));
+ cache.myVote = (Float) cursor.getFloat(cursor.getColumnIndex("myvote"));
+ cache.disabled = cursor.getLong(cursor.getColumnIndex("disabled")) == 1l;
+ cache.archived = cursor.getLong(cursor.getColumnIndex("archived")) == 1l;
+ cache.members = cursor.getLong(cursor.getColumnIndex("members")) == 1l;
+ cache.found = cursor.getLong(cursor.getColumnIndex("found")) == 1l;
+ cache.favourite = cursor.getLong(cursor.getColumnIndex("favourite")) == 1l;
+ cache.inventoryItems = (Integer) cursor.getInt(cursor.getColumnIndex("inventoryunknown"));
+ cache.onWatchlist = cursor.getLong(cursor.getColumnIndex("onWatchlist")) == 1l;
+ cache.reliableLatLon = cursor.getInt(cursor.getColumnIndex("reliable_latlon"))>0;
+ return cache;
+ }
+
public List<String> loadAttributes(String geocode) {
if (StringUtils.isBlank(geocode)) {
return null;
@@ -2231,31 +2267,40 @@ public class cgData {
List<cgLog> logs = new ArrayList<cgLog>();
- Cursor cursor = databaseRO.query(
- dbTableLogs,
- new String[]{"_id", "type", "author", "log", "date", "found"},
- "geocode = \"" + geocode + "\"",
- null,
- null,
- null,
- "date desc, _id asc",
- "100");
+ Cursor cursor = databaseRO.rawQuery(
+ "SELECT cg_logs._id as cg_logs_id, type, author, log, date, found, " + dbTableLogImages + "._id as cg_logImages_id, log_id, title, url FROM "
+ + dbTableLogs + " LEFT OUTER JOIN " + dbTableLogImages
+ + " ON ( cg_logs._id = log_id ) WHERE geocode = ? ORDER BY date desc, cg_logs._id asc", new String[]{ geocode});
if (cursor != null && cursor.getCount() > 0) {
- cursor.moveToFirst();
-
- do {
- cgLog log = new cgLog();
- log.id = (int) cursor.getInt(cursor.getColumnIndex("_id"));
- log.type = (int) cursor.getInt(cursor.getColumnIndex("type"));
- log.author = (String) cursor.getString(cursor.getColumnIndex("author"));
- log.log = (String) cursor.getString(cursor.getColumnIndex("log"));
- log.date = (long) cursor.getLong(cursor.getColumnIndex("date"));
- log.found = (int) cursor.getInt(cursor.getColumnIndex("found"));
- log.logImages = loadLogImages(log.id);
-
- logs.add(log);
- } while (cursor.moveToNext());
+ cgLog log = null;
+ while (cursor.moveToNext() && logs.size() < 100) {
+ if (log == null || log.id != cursor.getInt(cursor.getColumnIndex("cg_logs_id"))) {
+ log = new cgLog();
+ log.id = (int) cursor.getInt(cursor.getColumnIndex("cg_logs_id"));
+ log.type = (int) cursor.getInt(cursor.getColumnIndex("type"));
+ log.author = (String) cursor.getString(cursor.getColumnIndex("author"));
+ log.log = (String) cursor.getString(cursor.getColumnIndex("log"));
+ log.date = (long) cursor.getLong(cursor.getColumnIndex("date"));
+ log.found = (int) cursor.getInt(cursor.getColumnIndex("found"));
+ logs.add(log);
+ }
+ if (!cursor.isNull(cursor.getColumnIndex("cg_logImages_id"))) {
+ final cgImage log_img = new cgImage();
+ log_img.title = (String) cursor.getString(cursor.getColumnIndex("title"));
+ if (log_img.title == null) {
+ log_img.title = "";
+ }
+ log_img.url = (String) cursor.getString(cursor.getColumnIndex("url"));
+ if (log_img.url == null) {
+ log_img.url = "";
+ }
+ if (log.logImages == null) {
+ log.logImages = new ArrayList<cgImage>();
+ }
+ log.logImages.add(log_img);
+ }
+ }
}
if (cursor != null) {
@@ -2302,39 +2347,6 @@ public class cgData {
return logCounts;
}
- public List<cgImage> loadLogImages(int log_id) {
- init();
-
- List<cgImage> logImgList = new ArrayList<cgImage>();
-
- Cursor cursor = databaseRO.query(
- dbTableLogImages,
- new String[]{"_id", "log_id", "title", "url"},
- "log_id = \"" + log_id + "\"",
- null,
- null,
- null,
- null,
- "100");
-
- if (cursor != null && cursor.getCount() > 0) {
- cursor.moveToFirst();
-
- do {
- final cgImage log_img = new cgImage();
- log_img.title = (String)cursor.getString(cursor.getColumnIndex("title"));
- log_img.url = (String)cursor.getString(cursor.getColumnIndex("url"));
- logImgList.add(log_img);
- } while (cursor.moveToNext());
- }
-
- if (cursor != null) {
- cursor.close();
- }
-
- return logImgList;
- }
-
public List<cgTrackable> loadInventory(String geocode) {
if (StringUtils.isBlank(geocode)) {
return null;
diff --git a/src/cgeo/geocaching/cgeoapplication.java b/src/cgeo/geocaching/cgeoapplication.java
index ffd94ff..bb49973 100644
--- a/src/cgeo/geocaching/cgeoapplication.java
+++ b/src/cgeo/geocaching/cgeoapplication.java
@@ -474,7 +474,8 @@ public class cgeoapplication extends Application {
storage = new cgData(this);
}
- final List<cgCache> cachesPre = storage.loadCaches(geocodeList.toArray(), null, centerLat, centerLon, spanLat, spanLon, loadA, loadW, loadS, loadL, loadI, loadO);
+ // The list of geocodes is sufficient. more parameters generate an overly complex select.
+ final List<cgCache> cachesPre = storage.loadCaches(geocodeList.toArray(), null, null, null, null, null, loadA, loadW, loadS, loadL, loadI, loadO);
if (cachesPre != null) {
cachesOut.addAll(cachesPre);
}
@@ -697,13 +698,7 @@ public class cgeoapplication extends Application {
cache.reason = reason;
- if (storage.isThere(geocode, guid, false, false)) {
- cgCache mergedCache = cache.merge(storage);
- storage.saveCache(mergedCache);
- } else {
- // cache is not saved, new data are for storing
- storage.saveCache(cache);
- }
+ boolean status = storeWithMerge(cache, false);
}
}
@@ -726,13 +721,7 @@ public class cgeoapplication extends Application {
boolean status = false;
- if (storage.isThere(geocode, guid, false, false) == false || cache.reason >= 1) { // if for offline, do not merge
- status = storage.saveCache(cache);
- } else {
- cgCache mergedCache = cache.merge(storage);
-
- status = storage.saveCache(mergedCache);
- }
+ status = storeWithMerge(cache, cache.reason >= 1);
if (status) {
search.addGeocode(cache.geocode);
@@ -741,6 +730,26 @@ public class cgeoapplication extends Application {
return status;
}
+ /**
+ * Checks if Cache is already in Database and if so does a merge.
+ * @param cache The cache to be saved
+ * @param forceSave override the check and persist the new state.
+ * @return
+ */
+
+ private boolean storeWithMerge(cgCache cache, boolean forceSave) {
+ boolean status;
+ cgCache oldCache = null;
+ if (forceSave || (oldCache = storage.loadCache(cache.geocode, cache.guid, false, true, true, true, true, true)) !=null ) { // if for offline, do not merge
+ status = storage.saveCache(cache);
+ } else {
+ cgCache mergedCache = cache.merge(storage,oldCache);
+
+ status = storage.saveCache(mergedCache);
+ }
+ return status;
+ }
+
public void dropStored(int listId) {
if (storage == null) {
storage = new cgData(this);
diff --git a/src/cgeo/geocaching/cgeopoint.java b/src/cgeo/geocaching/cgeopoint.java
index 6b5aa60..c5e8dc4 100644
--- a/src/cgeo/geocaching/cgeopoint.java
+++ b/src/cgeo/geocaching/cgeopoint.java
@@ -13,7 +13,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
-import android.text.format.DateFormat;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
@@ -66,9 +65,7 @@ public class cgeopoint extends AbstractActivity {
longitude.setText(lonString);
latitude.setText(latString);
- CharSequence dateString = DateFormat.format("dd/MM/yy kk:mm",
- loc.getDate());
- date.setText(dateString);
+ date.setText(cgBase.formatShortDateTime(getContext(), loc.getDate()));
return convertView;
}