summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java29
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/Converter.java5
-rw-r--r--core/src/main/res/values/arrays.xml1
-rw-r--r--core/src/main/res/values/strings.xml4
5 files changed, 33 insertions, 8 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
index c44999c88..a8d0b6ba1 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
@@ -674,7 +674,7 @@ public class UserPreferences {
}
public static EpisodeCleanupAlgorithm getEpisodeCleanupAlgorithm() {
- int cleanupValue = Integer.parseInt(prefs.getString(PREF_EPISODE_CLEANUP, "-1"));
+ float cleanupValue = Float.parseFloat(prefs.getString(PREF_EPISODE_CLEANUP, "-1"));
if (cleanupValue == EPISODE_CLEANUP_QUEUE) {
return new APQueueCleanupAlgorithm();
} else if (cleanupValue == EPISODE_CLEANUP_NULL) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java
index e94874453..c9dd8f374 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java
@@ -13,6 +13,7 @@ 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.Converter;
/**
* Implementation of the EpisodeCleanupAlgorithm interface used by AntennaPod.
@@ -20,10 +21,11 @@ import de.danoeh.antennapod.core.feed.FeedMedia;
public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm {
private static final String TAG = "APCleanupAlgorithm";
- /** the number of days after playback to wait before an item is eligible to be cleaned up */
- private final int numberOfDaysAfterPlayback;
+ /** the number of days after playback to wait before an item is eligible to be cleaned up.
+ Fractional for number of hours, e.g., 0.5 = 12 hours, 0.0416 = 1 hour. */
+ private final float numberOfDaysAfterPlayback;
- public APCleanupAlgorithm(int numberOfDaysAfterPlayback) {
+ public APCleanupAlgorithm(float numberOfDaysAfterPlayback) {
this.numberOfDaysAfterPlayback = numberOfDaysAfterPlayback;
}
@@ -81,9 +83,8 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm {
private List<FeedItem> getCandidates() {
List<FeedItem> candidates = new ArrayList<>();
List<FeedItem> downloadedItems = DBReader.getDownloadedItems();
- Calendar cal = Calendar.getInstance();
- cal.add(Calendar.DAY_OF_MONTH, -1 * numberOfDaysAfterPlayback);
- Date mostRecentDateForDeletion = cal.getTime();
+
+ Date mostRecentDateForDeletion = minusDays(new Date(), numberOfDaysAfterPlayback);
for (FeedItem item : downloadedItems) {
if (item.hasMedia()
&& item.getMedia().isDownloaded()
@@ -108,5 +109,19 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm {
return getNumEpisodesToCleanup(0);
}
- public int getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; }
+ public float getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; }
+
+ private static Date minusDays(Date baseDate, float numberOfDays) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(baseDate);
+
+ int integral = (int)numberOfDays;
+ float fraction = numberOfDays - integral;
+
+ cal.add(Calendar.DAY_OF_MONTH, -1 * integral);
+ cal.add(Calendar.HOUR_OF_DAY, -1 * Converter.numberOfDaysFloatToNumberOfHours(fraction));
+
+ return cal.getTime();
+ }
+
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java
index 3cb226add..5915d216c 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java
@@ -130,6 +130,11 @@ public final class Converter {
return String.format(Locale.getDefault(), "%.1f ", hours) + context.getString(R.string.time_hours);
}
+
+ public static int numberOfDaysFloatToNumberOfHours(float numberOfDays) {
+ return (int)Math.ceil(numberOfDays * 24);
+ }
+
/**
* Converts the volume as read as the progress from a SeekBar scaled to 100 and as saved in
* UserPreferences to the format taken by setVolume methods.
diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml
index 12961504c..2c2ad0847 100644
--- a/core/src/main/res/values/arrays.xml
+++ b/core/src/main/res/values/arrays.xml
@@ -68,6 +68,7 @@
<string-array name="episode_cleanup_values">
<item>-1</item>
<item>0</item>
+ <item>0.5</item> <!-- 12 hours -->
<item>1</item>
<item>3</item>
<item>5</item>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 9dd928311..e217dda80 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -105,6 +105,10 @@
<string name="episode_cleanup_never">Never</string>
<string name="episode_cleanup_queue_removal">When not in queue</string>
<string name="episode_cleanup_after_listening">After finishing</string>
+ <plurals name="episode_cleanup_hours_after_listening">
+ <item quantity="one">1 hour after finishing</item>
+ <item quantity="other">%d hours after finishing</item>
+ </plurals>
<plurals name="episode_cleanup_days_after_listening">
<item quantity="one">1 day after finishing</item>
<item quantity="other">%d days after finishing</item>