diff options
Diffstat (limited to 'src/de/danoeh/antennapod/feed/FeedManager.java')
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedManager.java | 86 |
1 files changed, 59 insertions, 27 deletions
diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java index bdffdc667..5adca403b 100644 --- a/src/de/danoeh/antennapod/feed/FeedManager.java +++ b/src/de/danoeh/antennapod/feed/FeedManager.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.TreeSet; +import java.util.Comparator; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; @@ -676,8 +677,12 @@ public class FeedManager { int deletedEpisodes = performAutoCleanup(context, getPerformAutoCleanupArgs(undownloadedEpisodes)); int episodeSpaceLeft = undownloadedEpisodes; - if (UserPreferences.getEpisodeCacheSize() < downloadedEpisodes - + undownloadedEpisodes) { + boolean cacheIsUnlimited = UserPreferences.getEpisodeCacheSize() == UserPreferences + .getEpisodeCacheSizeUnlimited(); + + if (!cacheIsUnlimited + && UserPreferences.getEpisodeCacheSize() < downloadedEpisodes + + undownloadedEpisodes) { episodeSpaceLeft = UserPreferences.getEpisodeCacheSize() - (downloadedEpisodes - deletedEpisodes); } @@ -732,7 +737,9 @@ public class FeedManager { * that the number of episodes fits into the episode cache. * */ private int getPerformAutoCleanupArgs(final int episodeNumber) { - if (episodeNumber >= 0) { + if (episodeNumber >= 0 + && UserPreferences.getEpisodeCacheSize() != UserPreferences + .getEpisodeCacheSizeUnlimited()) { int downloadedEpisodes = getNumberOfDownloadedEpisodes(); if (downloadedEpisodes + episodeNumber >= UserPreferences .getEpisodeCacheSize()) { @@ -760,24 +767,45 @@ public class FeedManager { * @return The number of episodes that were actually deleted * */ private int performAutoCleanup(Context context, final int episodeNumber) { - int counter = 0; - if (episodeNumber > 0) { - int episodesLeft = episodeNumber; - feedloop: for (Feed feed : feeds) { - for (FeedItem item : feed.getItems()) { - if (item.hasMedia() && item.getMedia().isDownloaded()) { - if (!isInQueue(item) && item.isRead()) { - deleteFeedMedia(context, item.getMedia()); - counter++; - episodesLeft--; - if (episodesLeft == 0) { - break feedloop; - } - } - } + List<FeedItem> candidates = new ArrayList<FeedItem>(); + List<FeedItem> delete; + for (Feed feed : feeds) { + for (FeedItem item : feed.getItems()) { + if (item.hasMedia() && item.getMedia().isDownloaded() + && !isInQueue(item) && item.isRead()) { + candidates.add(item); } } } + + Collections.sort(candidates, new Comparator<FeedItem>() { + @Override + public int compare(FeedItem lhs, FeedItem rhs) { + Date l = lhs.getMedia().getPlaybackCompletionDate(); + Date r = rhs.getMedia().getPlaybackCompletionDate(); + + if (l == null) { + l = new Date(0); + } + if (r == null) { + r = new Date(0); + } + return l.compareTo(r); + } + }); + + if (candidates.size() > episodeNumber) { + delete = candidates.subList(0, episodeNumber); + } else { + delete = candidates; + } + + for (FeedItem item : delete) { + deleteFeedMedia(context, item.getMedia()); + } + + int counter = delete.size(); + if (AppConfig.DEBUG) Log.d(TAG, String.format( "Auto-delete deleted %d episodes (%d requested)", counter, @@ -970,7 +998,8 @@ public class FeedManager { } /** Removes a FeedItem from the queue. */ - public void removeQueueItem(final Context context, FeedItem item) { + public void removeQueueItem(final Context context, FeedItem item, + final boolean performAutoDownload) { boolean removed = queue.remove(item); if (removed) { dbExec.execute(new Runnable() { @@ -985,12 +1014,14 @@ public class FeedManager { }); } - new Thread() { - @Override - public void run() { - autodownloadUndownloadedItems(context); - } - }.start(); + if (performAutoDownload) { + new Thread() { + @Override + public void run() { + autodownloadUndownloadedItems(context); + } + }.start(); + } eventDist.sendQueueUpdateBroadcast(); } @@ -1606,7 +1637,8 @@ public class FeedManager { } boolean successful = logCursor .getInt(PodDBAdapter.KEY_SUCCESSFUL_INDEX) > 0; - int reason = logCursor.getInt(PodDBAdapter.KEY_REASON_INDEX); + DownloadError reason = DownloadError.fromCode( + logCursor.getInt(PodDBAdapter.KEY_REASON_INDEX)); String reasonDetailed = logCursor .getString(PodDBAdapter.KEY_REASON_DETAILED_INDEX); String title = logCursor @@ -1980,4 +2012,4 @@ public class FeedManager { } } -}
\ No newline at end of file +} |