summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authororionlee <orionlee@yahoo.com>2019-10-11 13:17:33 -0700
committerorionlee <orionlee@yahoo.com>2019-11-05 12:34:11 -0800
commit418d4fa4d4b2e983888ce92bc54cecae82c534fe (patch)
tree91c1df105c9fe6050ca4fa8f20f704e22f6f7901 /core/src
parentfb6fa010f8b8ba8aca4bb0eec173183bf1163f66 (diff)
downloadAntennaPod-418d4fa4d4b2e983888ce92bc54cecae82c534fe.zip
bugfix respect download order - obey user settings "Enqueue Downloaded"
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java20
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java29
2 files changed, 46 insertions, 3 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 edd5e61d1..16561779e 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
@@ -4,11 +4,13 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.preference.PreferenceManager;
+import android.text.TextUtils;
+import android.util.Log;
+
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
import androidx.core.app.NotificationCompat;
-import android.text.TextUtils;
-import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
@@ -285,10 +287,24 @@ public class UserPreferences {
return prefs.getBoolean(PREF_ENQUEUE_DOWNLOADED, true);
}
+ @VisibleForTesting
+ public static void setEnqueueDownloadedEpisodes(boolean enqueueDownloadedEpisodes) {
+ prefs.edit()
+ .putBoolean(PREF_ENQUEUE_DOWNLOADED, enqueueDownloadedEpisodes)
+ .apply();
+ }
+
public static boolean enqueueAtFront() {
return prefs.getBoolean(PREF_QUEUE_ADD_TO_FRONT, false);
}
+ @VisibleForTesting
+ public static void setEnqueueAtFront(boolean enqueueAtFront) {
+ prefs.edit()
+ .putBoolean(PREF_QUEUE_ADD_TO_FRONT, enqueueAtFront)
+ .apply();
+ }
+
/**
*
* @return {@code true} if in enqueuing items/podcast episodes, when the existing front item is
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
index def4d84b5..7dc53f8b3 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
@@ -7,6 +7,8 @@ import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.VisibleForTesting;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -26,6 +28,7 @@ import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.feed.FeedPreferences;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.GpodnetSyncService;
import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
@@ -331,7 +334,12 @@ public final class DBTasks {
}
// #2448: First, add to-download items to the queue before actual download
// so that the resulting queue order is the same as when download is clicked
- DBWriter.addQueueItem(context, items);
+ try {
+ enqueueFeedItemsToDownload(context, items);
+ } catch (Throwable t) {
+ throw new DownloadRequestException("Unexpected exception during enqueue before downloads", t);
+ }
+
// Then, download them
for (FeedItem item : items) {
if (item.getMedia() != null
@@ -358,6 +366,25 @@ public final class DBTasks {
}
}
+ @VisibleForTesting
+ public static List<? extends FeedItem> enqueueFeedItemsToDownload(final Context context,
+ FeedItem... items)
+ throws InterruptedException, ExecutionException {
+ List<FeedItem> itemsToEnqueue = new ArrayList<>();
+ if (UserPreferences.enqueueDownloadedEpisodes()) {
+ LongList queueIDList = DBReader.getQueueIDList();
+ for (FeedItem item : items) {
+ if (!queueIDList.contains(item.getId())) {
+ itemsToEnqueue.add(item);
+ }
+ }
+ DBWriter.addQueueItem(context,
+ itemsToEnqueue.toArray(new FeedItem[0]))
+ .get();
+ }
+ return itemsToEnqueue;
+ }
+
/**
* Looks for undownloaded episodes in the queue or list of unread items and request a download if
* 1. Network is available