Version one on the App Store

This commit is contained in:
2026-04-05 19:44:30 +02:00
parent c780be089d
commit 3ebf1763ed
26 changed files with 2088 additions and 842 deletions
@@ -18,7 +18,9 @@ struct RadiosView: View {
@State private var selectedRadio: MAMediaItem?
private var players: [MAPlayer] {
Array(service.playerManager.players.values).sorted { $0.name < $1.name }
Array(service.playerManager.players.values)
.filter { $0.available }
.sorted { $0.name < $1.name }
}
var body: some View {
@@ -56,9 +58,12 @@ struct RadiosView: View {
}
.sheet(isPresented: $showPlayerPicker) {
if let radio = selectedRadio {
PlayerPickerView(players: players) { player in
Task { await playRadio(radio, on: player) }
}
EnhancedPlayerPickerView(
players: players,
onSelect: { player in
Task { await playRadio(radio, on: player) }
}
)
}
}
}
@@ -84,6 +89,7 @@ struct RadiosView: View {
showError = true
}
}
}
// MARK: - Radio Row
@@ -94,23 +100,18 @@ private struct RadioRow: View {
var body: some View {
HStack(spacing: 12) {
if let imageUrl = radio.imageUrl {
CachedAsyncImage(url: service.imageProxyURL(path: imageUrl, size: 128)) { image in
image.resizable().aspectRatio(contentMode: .fill)
} placeholder: {
RoundedRectangle(cornerRadius: 8).fill(Color.gray.opacity(0.2))
}
.frame(width: 50, height: 50)
.clipShape(RoundedRectangle(cornerRadius: 8))
} else {
CachedAsyncImage(url: service.imageProxyURL(path: radio.imageUrl, provider: radio.imageProvider, size: 128)) { image in
image.resizable().aspectRatio(contentMode: .fill)
} placeholder: {
RoundedRectangle(cornerRadius: 8)
.fill(Color.gray.opacity(0.2))
.frame(width: 50, height: 50)
.overlay {
Image(systemName: "antenna.radiowaves.left.and.right")
.foregroundStyle(.secondary)
}
}
.frame(width: 50, height: 50)
.clipShape(RoundedRectangle(cornerRadius: 8))
Text(radio.name)
.font(.body)