From 6448cc598d64210f3db52856d57409716a523a27 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Mon, 10 Nov 2025 10:53:16 -0800 Subject: [PATCH] fix: disallow duplicate songs in queue --- .../tempo/repository/QueueRepository.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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); }