diff --git a/app/src/main/java/com/cappielloantonio/tempo/repository/QueueRepository.java b/app/src/main/java/com/cappielloantonio/tempo/repository/QueueRepository.java index afeca995..6b3d6252 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/repository/QueueRepository.java +++ b/app/src/main/java/com/cappielloantonio/tempo/repository/QueueRepository.java @@ -121,6 +121,15 @@ public class QueueRepository { } } + private boolean isMediaInQueue(List queue, Child media) { + if (queue == null || media == null) return false; + + return queue.stream().anyMatch(queueItem -> + queueItem != null && media.getId() != null && + queueItem.getId().equals(media.getId()) + ); + } + public void insertAll(List toAdd, boolean reset, int afterIndex) { try { List media = new ArrayList<>(); @@ -134,8 +143,14 @@ public class QueueRepository { media = getMediaThreadSafe.getMedia(); } - for (int i = 0; i < toAdd.size(); i++) { - Queue queueItem = new Queue(toAdd.get(i)); + List filteredToAdd = toAdd; + final List finalMedia = media; + filteredToAdd = toAdd.stream() + .filter(child -> !isMediaInQueue(finalMedia, child)) + .collect(Collectors.toList()); + + for (int i = 0; i < filteredToAdd.size(); i++) { + Queue queueItem = new Queue(filteredToAdd.get(i)); media.add(afterIndex + i, queueItem); }