BluetoothTracker/Sources/blts_tracker/BLTSTrackerApp.swift

61 lines
1.6 KiB
Swift

import SwiftUI
import IOBluetooth
import IOKit
import CoreAudio
@main
struct BLTSTrackerApp: App {
@ObservedObject var tracker = BluetoothTracker.shared
var body: some Scene {
MenuBarExtra {
menuContent
} label: {
menuBarLabel
}
}
@ViewBuilder
private var menuBarLabel: some View {
let active = tracker.activeHeadphone
let isConn = active?.isConnected == true
let percent = active?.primaryBatteryPercent
if isConn, let p = percent {
Label(" \(p)%", systemImage: "headphones")
.labelStyle(.titleAndIcon)
} else if isConn {
Label(" 100%", systemImage: "headphones")
.labelStyle(.titleAndIcon)
} else {
Label("", systemImage: "headphones")
.labelStyle(.iconOnly)
}
}
@ViewBuilder
private var menuContent: some View {
if let dev = tracker.activeHeadphone, dev.isConnected {
let percentStr = dev.primaryBatteryPercent != nil ? "\(dev.primaryBatteryPercent!)%" : "100%"
Text("🎧 \(dev.name): \(percentStr)")
.font(.headline)
} else {
Text("🎧 Наушники не подключены")
.foregroundColor(.secondary)
}
Divider()
Button("Обновить статус") {
tracker.refreshNow()
}
.keyboardShortcut("r")
Divider()
Button("Завершить") {
NSApplication.shared.terminate(nil)
}
.keyboardShortcut("q")
}
}