From 7d78b88a1cf51fc14912fcf36ae2e1efff368f75 Mon Sep 17 00:00:00 2001 From: orionlee Date: Tue, 2 Apr 2019 14:11:22 -0700 Subject: bulk remove from queue - frontend logic, with a stub backend. --- .../main/java/de/danoeh/antennapod/core/storage/DBWriter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'core/src/main/java') 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..451bb8685 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 @@ -6,8 +6,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log; +import android.widget.Toast; -import io.reactivex.annotations.NonNull; import org.shredzone.flattr4j.model.Flattr; import java.io.File; @@ -49,6 +49,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. @@ -459,6 +460,12 @@ public class DBWriter { } } + public static Future removeQueueItem(final Context context, final boolean performAutoDownload, + final long... itemIds) { + Toast.makeText(context, "To implement: remove from queue. ids=" + itemIds, Toast.LENGTH_SHORT).show(); + return dbExec.submit(() -> { }); + } + public static Future addFavoriteItem(final FeedItem item) { return dbExec.submit(() -> { final PodDBAdapter adapter = PodDBAdapter.getInstance().open(); -- cgit v1.2.3 From 70287a740ee0cfba23233e6cfb3757e2faaf65ad Mon Sep 17 00:00:00 2001 From: orionlee Date: Tue, 2 Apr 2019 14:59:12 -0700 Subject: bulk remove from queue - backend - refactor existing logic to support bulk remove --- .../danoeh/antennapod/core/storage/DBWriter.java | 53 +++++++++++++++++----- 1 file changed, 41 insertions(+), 12 deletions(-) (limited to 'core/src/main/java') 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 451bb8685..b2f28008a 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 @@ -90,7 +90,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()); } } }); @@ -431,23 +431,47 @@ public class DBWriter { */ public static Future removeQueueItem(final Context context, final FeedItem item, final boolean performAutoDownload) { - return dbExec.submit(() -> removeQueueItemSynchronous(context, item, performAutoDownload)); + return dbExec.submit(() -> removeQueueItemSynchronous(context, performAutoDownload, item.getId())); } 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 queue = DBReader.getQueue(adapter); if (queue != null) { - int position = queue.indexOf(item); - if (position >= 0) { - queue.remove(position); + boolean queueModified = false; + List events = new ArrayList<>(); + List 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"); } @@ -793,12 +817,17 @@ public class DBWriter { } private static boolean itemListContains(List items, long itemId) { - for (FeedItem item : items) { + return indexInItemList(items, itemId) >= 0; + } + + private static int indexInItemList(List 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; } /** -- cgit v1.2.3 From 364c9a308d1c18f4bb2d11f38a32781957fb5e9f Mon Sep 17 00:00:00 2001 From: orionlee Date: Tue, 2 Apr 2019 15:59:27 -0700 Subject: bulk remove from queue - backend - implement the new API --- .../java/de/danoeh/antennapod/core/storage/DBWriter.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'core/src/main/java') 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 b2f28008a..909b46414 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 @@ -6,7 +6,6 @@ import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log; -import android.widget.Toast; import org.shredzone.flattr4j.model.Flattr; @@ -434,6 +433,11 @@ public class DBWriter { 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 boolean performAutoDownload, final long... itemIds) { @@ -484,12 +488,6 @@ public class DBWriter { } } - public static Future removeQueueItem(final Context context, final boolean performAutoDownload, - final long... itemIds) { - Toast.makeText(context, "To implement: remove from queue. ids=" + itemIds, Toast.LENGTH_SHORT).show(); - return dbExec.submit(() -> { }); - } - public static Future addFavoriteItem(final FeedItem item) { return dbExec.submit(() -> { final PodDBAdapter adapter = PodDBAdapter.getInstance().open(); -- cgit v1.2.3 From b683d33bcb94f565367d28f504499e100b5839af Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 3 Apr 2019 14:21:35 -0700 Subject: bulk edit - refactor - reorder method parameter for DBWriter.removeQueueItem(Context, FeedItem, boolean) to be consistent with the rest of the API. --- .../danoeh/antennapod/core/service/playback/PlaybackService.java | 2 +- core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'core/src/main/java') 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 66cf7d244..827709350 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 @@ -918,7 +918,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { final List 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 909b46414..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 @@ -423,13 +423,12 @@ 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) { + final boolean performAutoDownload, final FeedItem item) { return dbExec.submit(() -> removeQueueItemSynchronous(context, performAutoDownload, item.getId())); } -- cgit v1.2.3