agent: refactor new battery package (#1872)

This commit is contained in:
henrygd
2026-04-02 19:55:48 -04:00
committed by hank
parent 80b73c7faf
commit d656036d3b
7 changed files with 33 additions and 84 deletions

View File

@@ -7,19 +7,11 @@ import (
"log/slog"
"math"
"os/exec"
"sync"
"howett.net/plist"
)
const (
stateUnknown uint8 = 0
stateEmpty uint8 = 1
stateFull uint8 = 2
stateCharging uint8 = 3
stateDischarging uint8 = 4
stateIdle uint8 = 5
)
type macBattery struct {
CurrentCapacity int `plist:"CurrentCapacity"`
MaxCapacity int `plist:"MaxCapacity"`
@@ -28,11 +20,6 @@ type macBattery struct {
ExternalConnected bool `plist:"ExternalConnected"`
}
var (
systemHasBattery = false
haveCheckedBattery = false
)
func readMacBatteries() ([]macBattery, error) {
out, err := exec.Command("ioreg", "-n", "AppleSmartBattery", "-r", "-a").Output()
if err != nil {
@@ -49,11 +36,8 @@ func readMacBatteries() ([]macBattery, error) {
}
// HasReadableBattery checks if the system has a battery and returns true if it does.
func HasReadableBattery() bool {
if haveCheckedBattery {
return systemHasBattery
}
haveCheckedBattery = true
var HasReadableBattery = sync.OnceValue(func() bool {
systemHasBattery := false
batteries, err := readMacBatteries()
for _, bat := range batteries {
if bat.MaxCapacity > 0 {
@@ -65,7 +49,7 @@ func HasReadableBattery() bool {
slog.Debug("No battery found", "err", err)
}
return systemHasBattery
}
})
// GetBatteryStats returns the current battery percent and charge state.
// Uses CurrentCapacity/MaxCapacity to match the value macOS displays.