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
@@ -70,6 +70,9 @@ private struct PickerPlayerCard: View {
let player: MAPlayer
let onSelect: () -> Void
// Always read live state so the indicator reflects real-time changes
private var livePlayer: MAPlayer { service.playerManager.players[player.playerId] ?? player }
private var currentItem: MAQueueItem? {
service.playerManager.playerQueues[player.playerId]?.currentItem
}
@@ -79,12 +82,12 @@ private struct PickerPlayerCard: View {
HStack(spacing: 12) {
VStack(alignment: .leading, spacing: 4) {
HStack(spacing: 6) {
if player.state == .playing {
if livePlayer.state == .playing {
Image(systemName: "waveform")
.font(.caption)
.foregroundStyle(.green)
}
Text(player.name)
Text(livePlayer.name)
.font(.headline)
.foregroundStyle(.primary)
.lineLimit(1)
@@ -102,7 +105,7 @@ private struct PickerPlayerCard: View {
.lineLimit(1)
}
} else {
Text(player.state == .off ? "Powered Off" : "No Track Playing")
Text(livePlayer.state == .off ? "Powered Off" : "No Track Playing")
.font(.subheadline)
.foregroundStyle(.tertiary)
.lineLimit(1)
@@ -148,13 +151,16 @@ private struct PickerGroupCard: View {
let memberNames: [String]
let onSelect: () -> Void
// Always read live state so the indicator reflects real-time changes
private var liveLeader: MAPlayer { service.playerManager.players[leader.playerId] ?? leader }
private var currentItem: MAQueueItem? {
service.playerManager.playerQueues[leader.playerId]?.currentItem
}
private var mediaItem: MAMediaItem? { currentItem?.mediaItem }
private var groupName: String {
([leader.name] + memberNames).joined(separator: " + ")
([liveLeader.name] + memberNames).joined(separator: " + ")
}
var body: some View {
@@ -164,7 +170,7 @@ private struct PickerGroupCard: View {
Image(systemName: "speaker.2.fill")
.font(.caption)
.foregroundStyle(.blue)
if leader.state == .playing {
if liveLeader.state == .playing {
Image(systemName: "waveform")
.font(.caption)
.foregroundStyle(.green)
@@ -187,7 +193,7 @@ private struct PickerGroupCard: View {
.lineLimit(1)
}
} else {
Text(leader.state == .off ? "Powered Off" : "No Track Playing")
Text(liveLeader.state == .off ? "Powered Off" : "No Track Playing")
.font(.subheadline)
.foregroundStyle(.tertiary)
.lineLimit(1)