Skip to content

Commit f1f75be

Browse files
committed
Fix shuffle returning true after queue was cleared
1 parent 7a7810d commit f1f75be

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

music/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
subprojects {
2-
version = "3.5.17-SNAPSHOT"
2+
version = "3.5.18-SNAPSHOT"
33
}

music/player/src/main/kotlin/dev/schlaubi/mikmusic/player/Queue.kt

+10-4
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ class Queue(private var tracksList: MutableList<QueuedTrack> = mutableListOf())
1111
nextIndex = 0
1212
order = LinkedList(order.shuffled())
1313
} else {
14-
val queue = order.subList(0, nextIndex)
15-
val shuffled = order.subList(nextIndex.coerceAtMost(order.lastIndex), order.size)
16-
val unShuffled = queue + shuffled.sorted()
14+
if (order.isNotEmpty()) {
15+
val queue = order.subList(0, nextIndex)
16+
val shuffled = order.subList(nextIndex.coerceAtMost(order.lastIndex), order.size)
17+
val unShuffled = queue + shuffled.sorted()
1718

19+
order = LinkedList(unShuffled)
20+
}
1821
nextIndex = tracksList.size
19-
order = LinkedList(unShuffled)
2022
}
2123
field = value
2224
}
@@ -43,13 +45,17 @@ class Queue(private var tracksList: MutableList<QueuedTrack> = mutableListOf())
4345
fun poll(): QueuedTrack {
4446
val queuedTrack = tracksList[order.poll()]
4547
nextIndex = nextIndex.coerceAtMost(order.size)
48+
if (order.size == 0) {
49+
shuffle = false
50+
}
4651
return queuedTrack
4752
}
4853

4954
fun clear() {
5055
nextIndex = 0
5156
tracksList.clear()
5257
order.clear()
58+
shuffle = false
5359
}
5460

5561
fun isEmpty() = order.isEmpty()

music/player/src/test/kotlin/QueueTest.kt

+20
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dev.schlaubi.mikmusic.player.SimpleQueuedTrack
66
import dev.schlaubi.stdx.serialization.emptyJsonObject
77
import kotlin.test.Test
88
import kotlin.test.assertEquals
9+
import kotlin.test.assertFalse
910
import kotlin.test.assertNotEquals
1011

1112
class QueueTest {
@@ -165,6 +166,25 @@ class QueueTest {
165166

166167
assertEquals(track, queue.poll())
167168
}
169+
170+
@Test
171+
fun `test shuffle is over after shuffle is over`() {
172+
val queue = makeMockQueue()
173+
queue.shuffle = true
174+
repeat(queue.tracks.size) { queue.poll() }
175+
176+
assertFalse(queue.shuffle)
177+
}
178+
179+
@Test
180+
fun `test shuffle is over after shuffle is over, when adding unshuffled tracks`() {
181+
val queue = makeMockQueue()
182+
queue.addTracks(mockTrack(23))
183+
queue.shuffle = true
184+
repeat(queue.tracks.size) { queue.poll() }
185+
186+
assertFalse(queue.shuffle)
187+
}
168188
}
169189

170190
private fun makeMockQueue() = Queue(MutableList(10, ::mockTrack))

0 commit comments

Comments
 (0)