diff options
Diffstat (limited to 'main/src/cgeo/geocaching/DataStore.java')
| -rw-r--r-- | main/src/cgeo/geocaching/DataStore.java | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/main/src/cgeo/geocaching/DataStore.java b/main/src/cgeo/geocaching/DataStore.java index 6da1af8..9d8a640 100644 --- a/main/src/cgeo/geocaching/DataStore.java +++ b/main/src/cgeo/geocaching/DataStore.java @@ -811,12 +811,19 @@ public class DataStore { /** * Remove obsolete cache directories in c:geo private storage. - * + */ + public static void removeObsoleteCacheDirectories() { + removeObsoleteCacheDirectories(database); + } + + /** + * Remove obsolete cache directories in c:geo private storage. + * * @param db * the read-write database to use */ private static void removeObsoleteCacheDirectories(final SQLiteDatabase db) { - final Pattern oldFilePattern = Pattern.compile("^[GC|TB|O][A-Z0-9]{4,7}$"); + final Pattern oldFilePattern = Pattern.compile("^[GC|TB|EC|GK|O][A-Z0-9]{4,7}$"); final SQLiteStatement select = db.compileStatement("select count(*) from " + dbTableCaches + " where geocode = ?"); final File[] files = LocalStorage.getStorage().listFiles(); final ArrayList<File> toRemove = new ArrayList<File>(files.length); @@ -2302,11 +2309,6 @@ public class DataStore { return new SearchResult(geocodes); } - /** delete caches from the DB store 3 days or more before */ - public static void clean() { - clean(false); - } - /** * Remove caches with listId = 0 * @@ -2355,6 +2357,8 @@ public class DataStore { cursor.close(); + geocodes = exceptCachesWithOfflineLog(geocodes); + if (!geocodes.isEmpty()) { Log.d("Database clean: removing " + geocodes.size() + " geocaches from listId=0"); removeCaches(geocodes, LoadFlags.REMOVE_ALL); @@ -2367,6 +2371,33 @@ public class DataStore { databaseCleaned = true; } + /** + * remove all geocodes from the given list of geocodes where an offline log exists + * + * @param geocodes + * @return + */ + private static Set<String> exceptCachesWithOfflineLog(Set<String> geocodes) { + if (geocodes.isEmpty()) { + return geocodes; + } + + init(); + final Cursor cursor = database.query( + dbTableLogsOffline, + new String[] { "geocode" }, + null, + null, + null, + null, + null); + + final List<String> geocodesWithOfflineLog = Arrays.asList(getFirstColumn(cursor)); + + geocodes.removeAll(geocodesWithOfflineLog); + return geocodes; + } + public static void removeAllFromCache() { // clean up CacheCache cacheCache.removeAllFromCache(); |
