summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorTom Hennen <tom.hennen@gmail.com>2015-09-29 20:50:31 -0400
committerTom Hennen <tom.hennen@gmail.com>2015-09-29 20:50:31 -0400
commit2339fb99e98bb7d5a078aea47095c94df1f88f10 (patch)
tree96666c738f31d204b0509509e756b403151c1915 /core/src/main
parentf5801c218119d5f4f9015e805f9462d02d4b3c16 (diff)
downloadAntennaPod-2339fb99e98bb7d5a078aea47095c94df1f88f10.zip
basic implementation of queue remove. some compile bugs still
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APDownloadAlgorithm.java17
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APNullCleanupAlgorithm.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java64
3 files changed, 67 insertions, 19 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APDownloadAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APDownloadAlgorithm.java
index 748f842b9..efc742be2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/APDownloadAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APDownloadAlgorithm.java
@@ -99,21 +99,4 @@ public class APDownloadAlgorithm implements AutomaticDownloadAlgorithm {
}
};
}
-
- private int getPerformAutoCleanupArgs(final int numberOfEpisodesToDownload) {
- if (numberOfEpisodesToDownload >= 0
- && UserPreferences.getEpisodeCacheSize() != UserPreferences
- .getEpisodeCacheSizeUnlimited()) {
- int downloadedEpisodes = DBReader
- .getNumberOfDownloadedEpisodes();
- if (downloadedEpisodes + numberOfEpisodesToDownload >= UserPreferences
- .getEpisodeCacheSize()) {
-
- return downloadedEpisodes + numberOfEpisodesToDownload
- - UserPreferences.getEpisodeCacheSize();
- }
- }
- return 0;
- }
-
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APNullCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APNullCleanupAlgorithm.java
index 27396de4b..b17f9fdee 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/APNullCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APNullCleanupAlgorithm.java
@@ -1,14 +1,19 @@
package de.danoeh.antennapod.core.storage;
import android.content.Context;
+import android.util.Log;
/**
* A cleanup algorithm that never removes anything
*/
public class APNullCleanupAlgorithm implements EpisodeCleanupAlgorithm<Integer> {
+
+ private static final String TAG = "APNullCleanupAlgorithm";
+
@Override
public int performCleanup(Context context, Integer parameter) {
// never clean anything up
+ Log.i(TAG, "performCleanup: Not removing anything");
return 0;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java
index c45f30e62..18dd46c7a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java
@@ -1,15 +1,75 @@
package de.danoeh.antennapod.core.storage;
import android.content.Context;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.util.LongList;
/**
* A cleanup algorithm that removes any item that isn't in the queue and isn't a favorite
* but only if space is needed.
*/
public class APQueueCleanupAlgorithm implements EpisodeCleanupAlgorithm<Integer> {
+
+ private static final String TAG = "APQueueCleanupAlgorithm";
+
@Override
- public int performCleanup(Context context, Integer parameter) {
- return 0;
+ public int performCleanup(Context context, Integer numberOfEpisodesToDelete) {
+ List<FeedItem> candidates = new ArrayList<>();
+ List<FeedItem> downloadedItems = DBReader.getDownloadedItems();
+ LongList queue = DBReader.getQueueIDList();
+ List<FeedItem> delete;
+ for (FeedItem item : downloadedItems) {
+ if (!queue.contains(item.getId())) {
+ candidates.add(item);
+ }
+ }
+
+ // in the absence of better data, we'll sort by item publication date
+ Collections.sort(candidates, (lhs, rhs) -> {
+ Date l = lhs.getPubDate();
+ Date r = rhs.getPubDate();
+
+ if (l == null) {
+ l = new Date();
+ }
+ if (r == null) {
+ r = new Date();
+ }
+ return l.compareTo(r);
+ });
+
+ if (candidates.size() > numberOfEpisodesToDelete) {
+ delete = candidates.subList(0, numberOfEpisodesToDelete);
+ } else {
+ delete = candidates;
+ }
+
+ for (FeedItem item : delete) {
+ try {
+ DBWriter.deleteFeedMediaOfItem(context, item.getMedia().getId()).get();
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+
+ int counter = delete.size();
+
+
+ Log.i(TAG, String.format(
+ "Auto-delete deleted %d episodes (%d requested)", counter,
+ numberOfEpisodesToDelete));
+
+ return counter;
}
@Override