import SwiftUI @MainActor struct CastDeviceMenu: View { @ObservedObject var model: PlayerModel @ObservedObject private var discovery: CastDiscovery var icon = true init(model: PlayerModel, icon: Bool = true) { self.model = model self.discovery = model.castDiscovery self.icon = icon } var body: some View { Menu { if let device = model.castDevice { Text((model.castConnecting ? "Connecting to " : "Casting to ") + device.name) Button(model.castConnecting ? "Cancel Casting" : "Play on This Mac") { model.stopCasting() } Divider() } ForEach(discovery.devices) { device in Button(device.name) { model.cast(to: device) } .disabled(!model.canCast) } if discovery.devices.isEmpty { Text("No Cast devices discovered") } if let error = discovery.error { Text(error) } Divider() Button("Find Cast Devices…") { discovery.start() } } label: { if icon { Image(systemName: "airplayvideo") .font(.system(size: model.isCompact ? 17 : 15)) .frame(width: 24, height: 22) } else { Text("Cast to Device") } } .menuStyle(.button) .buttonStyle(.plain) .menuIndicator(.hidden) .fixedSize() .accessibilityLabel("Cast to Device") .help(model.castDevice.map { "Casting to " + $0.name } ?? "Cast to Device") } }