diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2013-04-20 11:19:03 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2013-04-20 11:19:03 +0200 |
commit | c0de44d0eece5af5c40a0ec38536032e4074b082 (patch) | |
tree | b5d119671d74cb2e0f259433118d534aab7e7b7b /src | |
parent | 7c2979972ecbeef09e3ec93a35443e0cb2aded99 (diff) | |
parent | 63084d8c7988090db76f7dd46575ed5137a44543 (diff) | |
download | AntennaPod-c0de44d0eece5af5c40a0ec38536032e4074b082.zip |
Merge branch 'delete-oldest-episodes' of git://github.com/patheticpat/AntennaPod into patheticpat-delete-oldest-episodes
Diffstat (limited to 'src')
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedManager.java | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java index 2fae55436..38ef3921f 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; @@ -760,24 +761,44 @@ 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, @@ -1983,4 +2004,4 @@ public class FeedManager { } } -}
\ No newline at end of file +} |