Expose iPhone playback controls
This commit is contained in:
@@ -105,10 +105,22 @@ public struct PlaybackQueue: Hashable, Sendable {
|
||||
queuedTrackIDs preferredQueuedTrackIDs: [String]? = nil
|
||||
) {
|
||||
isShuffleEnabled = isEnabled
|
||||
let nextQueuedTrackIDs: [String]?
|
||||
|
||||
if isEnabled {
|
||||
nextQueuedTrackIDs = preferredQueuedTrackIDs
|
||||
?? Self.makeShuffledTrackIDs(
|
||||
from: catalogTrackIDs,
|
||||
currentTrackID: currentTrackID
|
||||
)
|
||||
} else {
|
||||
nextQueuedTrackIDs = preferredQueuedTrackIDs
|
||||
}
|
||||
|
||||
replaceTrackIDs(
|
||||
catalogTrackIDs,
|
||||
currentTrackID: currentTrackID,
|
||||
queuedTrackIDs: preferredQueuedTrackIDs
|
||||
queuedTrackIDs: nextQueuedTrackIDs
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ public enum PlaybackRepeatMode: String, Codable, CaseIterable, Hashable, Sendabl
|
||||
public var nextMode: PlaybackRepeatMode {
|
||||
switch self {
|
||||
case .off:
|
||||
.all
|
||||
case .all:
|
||||
.one
|
||||
case .one:
|
||||
.all
|
||||
case .all:
|
||||
.off
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,19 @@ final class PlaybackQueueTests: XCTestCase {
|
||||
XCTAssertEqual(queue.currentTrackID, "c")
|
||||
}
|
||||
|
||||
func testEnablingShuffleKeepsCurrentTrackSelectedAndAtQueueFront() {
|
||||
var queue = PlaybackQueue(trackIDs: ["a", "b", "c", "d"])
|
||||
queue.selectTrack("c")
|
||||
|
||||
queue.setShuffleEnabled(true)
|
||||
|
||||
XCTAssertTrue(queue.isShuffleEnabled)
|
||||
XCTAssertEqual(queue.currentTrackID, "c")
|
||||
XCTAssertEqual(queue.queuedTrackIDs.first, "c")
|
||||
XCTAssertEqual(Set(queue.queuedTrackIDs), Set(["a", "b", "c", "d"]))
|
||||
XCTAssertEqual(Set(queue.queuedTrackIDs).count, 4)
|
||||
}
|
||||
|
||||
func testRepeatAllWrapsAroundQueueBoundaries() {
|
||||
var queue = PlaybackQueue(trackIDs: ["a", "b", "c"])
|
||||
queue.selectTrack("c")
|
||||
@@ -63,6 +76,21 @@ final class PlaybackQueueTests: XCTestCase {
|
||||
XCTAssertEqual(queue.moveToPreviousTrack(), "b")
|
||||
}
|
||||
|
||||
func testCycleRepeatModeUsesOffOneAllOrder() {
|
||||
var queue = PlaybackQueue(trackIDs: ["a", "b"])
|
||||
|
||||
XCTAssertEqual(queue.repeatMode, .off)
|
||||
|
||||
queue.cycleRepeatMode()
|
||||
XCTAssertEqual(queue.repeatMode, .one)
|
||||
|
||||
queue.cycleRepeatMode()
|
||||
XCTAssertEqual(queue.repeatMode, .all)
|
||||
|
||||
queue.cycleRepeatMode()
|
||||
XCTAssertEqual(queue.repeatMode, .off)
|
||||
}
|
||||
|
||||
func testReplacingTrackIDsDropsRemovedTracksFromQueue() {
|
||||
var queue = PlaybackQueue(
|
||||
trackIDs: ["a", "b", "c"],
|
||||
|
||||
Reference in New Issue
Block a user