bulk remove from queue - backend - refactor existing logic to support bulk remove
This commit is contained in:
parent
7d78b88a1c
commit
70287a740e
|
@ -90,7 +90,7 @@ public class DBWriter {
|
||||||
boolean result = deleteFeedMediaSynchronous(context, media);
|
boolean result = deleteFeedMediaSynchronous(context, media);
|
||||||
|
|
||||||
if (result && UserPreferences.shouldDeleteRemoveFromQueue()) {
|
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,
|
public static Future<?> removeQueueItem(final Context context,
|
||||||
final FeedItem item, final boolean performAutoDownload) {
|
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,
|
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();
|
final PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||||
adapter.open();
|
adapter.open();
|
||||||
final List<FeedItem> queue = DBReader.getQueue(adapter);
|
final List<FeedItem> queue = DBReader.getQueue(adapter);
|
||||||
|
|
||||||
if (queue != null) {
|
if (queue != null) {
|
||||||
int position = queue.indexOf(item);
|
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) {
|
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);
|
queue.remove(position);
|
||||||
adapter.setQueue(queue);
|
|
||||||
item.removeTag(FeedItem.TAG_QUEUE);
|
item.removeTag(FeedItem.TAG_QUEUE);
|
||||||
EventBus.getDefault().post(QueueEvent.removed(item));
|
events.add(QueueEvent.removed(item));
|
||||||
EventBus.getDefault().post(FeedItemEvent.updated(item));
|
updatedItems.add(item);
|
||||||
|
queueModified = true;
|
||||||
|
} else {
|
||||||
|
Log.v(TAG, "removeQueueItem - item not in queue:" + itemId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (queueModified) {
|
||||||
|
adapter.setQueue(queue);
|
||||||
|
for (QueueEvent event : events) {
|
||||||
|
EventBus.getDefault().post(event);
|
||||||
|
}
|
||||||
|
EventBus.getDefault().post(FeedItemEvent.updated(updatedItems));
|
||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "Queue was not modified by call to removeQueueItem");
|
Log.w(TAG, "Queue was not modified by call to removeQueueItem");
|
||||||
}
|
}
|
||||||
|
@ -793,12 +817,17 @@ public class DBWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean itemListContains(List<FeedItem> items, long itemId) {
|
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) {
|
if (item.getId() == itemId) {
|
||||||
return true;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue