summaryrefslogtreecommitdiff
path: root/core/src/main/java/de
diff options
context:
space:
mode:
authorH. Lehmann <ByteHamster@users.noreply.github.com>2019-04-06 21:45:55 +0200
committerGitHub <noreply@github.com>2019-04-06 21:45:55 +0200
commit5f86af88b18b94d3ba741963a6ae4ea51a532050 (patch)
tree00e5f60c915a016fe01729fe9cce375ce66511d0 /core/src/main/java/de
parent31194e02a5c7b4ddea37dcbc5ce48cbef5f6e8dc (diff)
parentcb14fd930fd3967053d9ddbab152ea0af65ffc0b (diff)
downloadAntennaPod-5f86af88b18b94d3ba741963a6ae4ea51a532050.zip
Merge pull request #3083 from orionlee/bulk_remove_from_queue_1145
Bulk remove from queue
Diffstat (limited to 'core/src/main/java/de')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java67
2 files changed, 51 insertions, 18 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index c31dbc83d..7fe93a162 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -898,7 +898,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
final List<FeedItem> queue = taskManager.getQueue();
if (QueueAccess.ItemListAccess(queue).contains(item.getId())) {
// don't know if it actually matters to not autodownload when smart mark as played is triggered
- DBWriter.removeQueueItem(PlaybackService.this, item, ended);
+ DBWriter.removeQueueItem(PlaybackService.this, ended, item);
}
} catch (InterruptedException e) {
e.printStackTrace();
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
index ab55bd3c0..ad20bfa0a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
@@ -7,7 +7,6 @@ import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
-import io.reactivex.annotations.NonNull;
import org.shredzone.flattr4j.model.Flattr;
import java.io.File;
@@ -49,6 +48,7 @@ import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
import de.danoeh.antennapod.core.util.flattr.FlattrThing;
import de.danoeh.antennapod.core.util.flattr.SimpleFlattrThing;
import de.greenrobot.event.EventBus;
+import io.reactivex.annotations.NonNull;
/**
* Provides methods for writing data to AntennaPod's database.
@@ -89,7 +89,7 @@ public class DBWriter {
boolean result = deleteFeedMediaSynchronous(context, media);
if (result && UserPreferences.shouldDeleteRemoveFromQueue()) {
- DBWriter.removeQueueItemSynchronous(context, media.getItem(), false);
+ DBWriter.removeQueueItemSynchronous(context, false, media.getItem().getId());
}
}
});
@@ -423,30 +423,58 @@ public class DBWriter {
/**
* Removes a FeedItem object from the queue.
- *
- * @param context A context that is used for opening a database connection.
- * @param item FeedItem that should be removed.
+ * @param context A context that is used for opening a database connection.
* @param performAutoDownload true if an auto-download process should be started after the operation.
+ * @param item FeedItem that should be removed.
*/
public static Future<?> removeQueueItem(final Context context,
- final FeedItem item, final boolean performAutoDownload) {
- return dbExec.submit(() -> removeQueueItemSynchronous(context, item, performAutoDownload));
+ final boolean performAutoDownload, final FeedItem item) {
+ return dbExec.submit(() -> removeQueueItemSynchronous(context, performAutoDownload, item.getId()));
+ }
+
+ public static Future<?> removeQueueItem(final Context context, final boolean performAutoDownload,
+ final long... itemIds) {
+ return dbExec.submit(() -> removeQueueItemSynchronous(context, performAutoDownload, itemIds));
}
private static void removeQueueItemSynchronous(final Context context,
- final FeedItem item, final boolean performAutoDownload) {
+ final boolean performAutoDownload,
+ final long... itemIds) {
+ if (itemIds.length < 1) {
+ return;
+ }
final PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
final List<FeedItem> queue = DBReader.getQueue(adapter);
if (queue != null) {
- int position = queue.indexOf(item);
- if (position >= 0) {
- queue.remove(position);
+ boolean queueModified = false;
+ List<QueueEvent> events = new ArrayList<>();
+ List<FeedItem> updatedItems = new ArrayList<>();
+ for (long itemId : itemIds) {
+ int position = indexInItemList(queue, itemId);
+ if (position >= 0) {
+ final FeedItem item = DBReader.getFeedItem(itemId);
+ if (item == null) {
+ Log.e(TAG, "removeQueueItem - item in queue but somehow cannot be loaded." +
+ " Item ignored. It should never happen. id:" + itemId);
+ continue;
+ }
+ queue.remove(position);
+ item.removeTag(FeedItem.TAG_QUEUE);
+ events.add(QueueEvent.removed(item));
+ updatedItems.add(item);
+ queueModified = true;
+ } else {
+ Log.v(TAG, "removeQueueItem - item not in queue:" + itemId);
+ }
+ }
+ if (queueModified) {
adapter.setQueue(queue);
- item.removeTag(FeedItem.TAG_QUEUE);
- EventBus.getDefault().post(QueueEvent.removed(item));
- EventBus.getDefault().post(FeedItemEvent.updated(item));
+ for (QueueEvent event : events) {
+ EventBus.getDefault().post(event);
+ }
+ EventBus.getDefault().post(FeedItemEvent.updated(updatedItems));
} else {
Log.w(TAG, "Queue was not modified by call to removeQueueItem");
}
@@ -786,12 +814,17 @@ public class DBWriter {
}
private static boolean itemListContains(List<FeedItem> items, long itemId) {
- for (FeedItem item : items) {
+ return indexInItemList(items, itemId) >= 0;
+ }
+
+ private static int indexInItemList(List<FeedItem> items, long itemId) {
+ for (int i = 0; i < items.size(); i ++) {
+ FeedItem item = items.get(i);
if (item.getId() == itemId) {
- return true;
+ return i;
}
}
- return false;
+ return -1;
}
/**