From 48885e5d506a4434b52c7f053e1edf540e573df0 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Tue, 11 Feb 2014 14:55:46 -0800 Subject: #275 Fix CacheCleaner not using pinned music in used space calculation --- src/github/daneren2005/dsub/util/CacheCleaner.java | 23 ++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/util/CacheCleaner.java b/src/github/daneren2005/dsub/util/CacheCleaner.java index 62204c76..102c1dc9 100644 --- a/src/github/daneren2005/dsub/util/CacheCleaner.java +++ b/src/github/daneren2005/dsub/util/CacheCleaner.java @@ -65,7 +65,7 @@ public class CacheCleaner { } } - private long getMinimumDelete(List files) { + private long getMinimumDelete(List files, List pinned) { if(files.size() == 0) { return 0L; } @@ -76,6 +76,9 @@ public class CacheCleaner { for (File file : files) { bytesUsedBySubsonic += file.length(); } + for (File file : pinned) { + bytesUsedBySubsonic += file.length(); + } // Ensure that file system is not more than 95% full. StatFs stat = new StatFs(files.get(0).getPath()); @@ -118,17 +121,19 @@ public class CacheCleaner { Log.i(TAG, "Deleted : " + Util.formatBytes(bytesDeleted)); } - private void findCandidatesForDeletion(File file, List files, List dirs) { + private void findCandidatesForDeletion(File file, List files, List pinned, List dirs) { if (file.isFile()) { String name = file.getName(); boolean isCacheFile = name.endsWith(".partial") || name.contains(".partial.") || name.endsWith(".complete") || name.contains(".complete."); if (isCacheFile) { files.add(file); - } + } else { + pinned.add(file); + } } else { // Depth-first for (File child : FileUtil.listFiles(file)) { - findCandidatesForDeletion(child, files, dirs); + findCandidatesForDeletion(child, files, pinned, dirs); } dirs.add(file); } @@ -171,14 +176,15 @@ public class CacheCleaner { try { List files = new ArrayList(); + List pinned = new ArrayList(); List dirs = new ArrayList(); - findCandidatesForDeletion(FileUtil.getMusicDirectory(context), files, dirs); + findCandidatesForDeletion(FileUtil.getMusicDirectory(context), files, pinned, dirs); sortByAscendingModificationTime(files); Set undeletable = findUndeletableFiles(); - deleteFiles(files, undeletable, getMinimumDelete(files), true); + deleteFiles(files, undeletable, getMinimumDelete(files, pinned), true); deleteEmptyDirs(dirs, undeletable); } catch (RuntimeException x) { Log.e(TAG, "Error in cache cleaning.", x); @@ -198,10 +204,11 @@ public class CacheCleaner { try { List files = new ArrayList(); + List pinned = new ArrayList(); List dirs = new ArrayList(); - findCandidatesForDeletion(FileUtil.getMusicDirectory(context), files, dirs); + findCandidatesForDeletion(FileUtil.getMusicDirectory(context), files, pinned, dirs); - long bytesToDelete = getMinimumDelete(files); + long bytesToDelete = getMinimumDelete(files, pinned); if(bytesToDelete > 0L) { sortByAscendingModificationTime(files); Set undeletable = findUndeletableFiles(); -- cgit v1.2.3