BluetoothTracker/Sources/blts_tracker/BLTSTrackerApp.swift

74 lines
2.2 KiB
Swift

import SwiftUI
import IOBluetooth
import IOKit
import CoreAudio
@main
struct BLTSTrackerApp: App {
@ObservedObject var tracker = BluetoothTracker.shared
@ObservedObject var updater = UpdaterService.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(" ...", 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!)%" : "Определение..."
Text("🎧 \(dev.name): \(percentStr)")
.font(.headline)
if let l = dev.leftBattery, let r = dev.rightBattery {
Text("Левый: \(l)% | Правый: \(r)%")
.font(.caption)
.foregroundColor(.secondary)
}
} else {
Text("🎧 Наушники не подключены")
.foregroundColor(.secondary)
}
Divider()
Button("Обновить заряд") {
tracker.refreshNow()
}
.keyboardShortcut("r")
Button(updater.isUpdating ? "Обновление..." : "🔄 Обновить из GitHub") {
updater.checkForUpdatesAndApply()
}
.disabled(updater.isUpdating)
.keyboardShortcut("u")
Divider()
Button("Завершить") {
NSApplication.shared.terminate(nil)
}
.keyboardShortcut("q")
}
}