package types import ( "bytes" "encoding/json" "fmt" "os" "git.zaphyra.eu/airpodsctl/helpers" ) func (device Device) FormatWaybarString() string { type WaybarFormat struct { Class string `json:"class,omitempty"` Percentage int `json:"percentage"` Text StringSlice `json:"text,omitempty"` Tooltip string `json:"tooltip,omitempty"` } // fmt.Printf("%+v\n", device) output := WaybarFormat{} tooltip := StringSlice{} tooltip.Add(fmt.Sprintf("Device:\t\t%s", device.Name)) tooltip.Add(fmt.Sprintf("Connected:\t%s", device.Connected)) if device.ANCMode.Valid { tooltip.Add(fmt.Sprintf("ANC-Mode:\t%s", device.ANCMode.Value)) } if device.BatteryTTLEstimate.Valid { tooltip.Add(fmt.Sprintf("\n󱧦 ~%s remaining", device.BatteryTTLEstimate)) } if device.Battery.Headphone.Valid { var chargeSymbol string if device.Battery.Headphone.Value.Charging { chargeSymbol = " " } tooltip.Add(fmt.Sprintf("󰁹 Headphones: %d% %#s", device.Battery.Headphone.Value.Level, chargeSymbol)) output.Percentage = device.Battery.Headphone.Value.Level } if device.Battery.LeftBud.Valid || device.Battery.RightBud.Valid { var batteryPercentage []float64 var batteryStateBuds StringSlice if device.Battery.LeftBud.Valid { var chargeSymbol string if device.Battery.LeftBud.Value.Charging { chargeSymbol = " " } batteryStateBuds.Add(fmt.Sprintf("L: %d%%%#s", device.Battery.LeftBud.Value.Level, chargeSymbol)) batteryPercentage = append(batteryPercentage, float64(device.Battery.LeftBud.Value.Level)) } if device.Battery.RightBud.Valid { var chargeSymbol string if device.Battery.RightBud.Value.Charging { chargeSymbol = " " } batteryStateBuds.Add(fmt.Sprintf("R: %d%%%#s", device.Battery.RightBud.Value.Level, chargeSymbol)) batteryPercentage = append(batteryPercentage, float64(device.Battery.RightBud.Value.Level)) } tooltip.Add(fmt.Sprintf("󰁹 Buds: %#s", batteryStateBuds.ConcatString(" "))) output.Percentage = int(helpers.Mean(batteryPercentage)) } if device.Battery.Case.Valid { var chargeSymbol = "" if device.Battery.Case.Value.Charging { chargeSymbol = "" } tooltip.Add(fmt.Sprintf("󰁹 Case: %d%%%#s", device.Battery.Case.Value.Level, chargeSymbol)) } output.Tooltip = tooltip.ConcatString("\n") jsonOutputBuffer := &bytes.Buffer{} jsonEncoder := json.NewEncoder(jsonOutputBuffer) jsonEncoder.SetEscapeHTML(false) err := jsonEncoder.Encode(output) if err != nil { fmt.Fprintln(os.Stderr, "[FormatWaybarString] Unable to marshal JSON: %s", err) return "" } return string(jsonOutputBuffer.Bytes()) }