Queue mgmt, Podcast support, Favorites section.

This commit is contained in:
2026-04-08 10:26:50 +02:00
parent f55b7e478b
commit d7e7bef83f
14 changed files with 1177 additions and 60 deletions
@@ -273,4 +273,31 @@ final class MAPlayerManager {
}
try await service.playIndex(playerId: playerId, index: index)
}
func setShuffle(playerId: String, enabled: Bool) async throws {
guard let service else { throw MAWebSocketClient.ClientError.notConnected }
try await service.setQueueShuffle(playerId: playerId, enabled: enabled)
}
func setRepeatMode(playerId: String, mode: RepeatMode) async throws {
guard let service else { throw MAWebSocketClient.ClientError.notConnected }
try await service.setQueueRepeatMode(playerId: playerId, mode: mode)
}
func clearQueue(playerId: String) async throws {
guard let service else { throw MAWebSocketClient.ClientError.notConnected }
try await service.clearQueue(playerId: playerId)
}
func moveQueueItem(playerId: String, queueItemId: String, posShift: Int) async throws {
guard let service else { throw MAWebSocketClient.ClientError.notConnected }
try await service.moveQueueItem(playerId: playerId, queueItemId: queueItemId, posShift: posShift)
// Optimistic local update move the item in our cached list
if var items = queues[playerId], let idx = items.firstIndex(where: { $0.queueItemId == queueItemId }) {
let item = items.remove(at: idx)
let dest = max(0, min(items.count, idx + posShift))
items.insert(item, at: dest)
queues[playerId] = items
}
}
}