diff options
| author | Julian Hurst <julian.hurst@digdash.com> | 2024-09-25 10:55:54 +0200 |
|---|---|---|
| committer | Julian Hurst <julian.hurst@digdash.com> | 2024-09-25 10:55:54 +0200 |
| commit | bf36a1dd4a326bf77c0cedbc1734b7676ddbc91a (patch) | |
| tree | 96e8f2c596f83523813a463697aa88678339b47e | |
| parent | ac6db6c9c392bc35fceb9b8123a3619c18a9b242 (diff) | |
| download | statusbar-bf36a1dd4a326bf77c0cedbc1734b7676ddbc91a.tar.gz | |
Add support for battery status with labels
| -rw-r--r-- | statusbar.go | 78 |
1 files changed, 63 insertions, 15 deletions
diff --git a/statusbar.go b/statusbar.go index e5cf559..68c14c9 100644 --- a/statusbar.go +++ b/statusbar.go @@ -80,6 +80,10 @@ type ClockConfig struct { type BatteryConfig struct { Label string SubLabel string `toml:"sublabel"` + FullLabel string `toml:"fulllabel"` + ChargingLabel string `toml:"charginglabel"` + DischargingLabel string `toml:"discharginglabel"` + UnknownStatusLabel string `toml:"unknownstatuslabel"` Batteries []string `toml:"batteries"` } @@ -271,39 +275,83 @@ func (mocp MOCP) status() int { } } +func readWithDefault(fpath string, def string) string { + content, err := ioutil.ReadFile(fpath) + if err != nil { + content = []byte(def) + } + return strings.TrimSuffix(string(content), "\n") +} + +func labelStatus(config BatteryConfig, status string) string { + switch status { + case "Full": + if config.FullLabel != "" { + return config.FullLabel + } + case "Charging": + if config.ChargingLabel != "" { + return config.ChargingLabel + } + case "Discharging": + if config.DischargingLabel != "" { + return config.DischargingLabel + } + default: + if config.UnknownStatusLabel != "" { + return config.UnknownStatusLabel + } + } + return status +} + func battery(config BatteryConfig) string { var b strings.Builder const batteryPath = "/sys/class/power_supply" - var batteries []string + + type Battery struct { + nb int + capacity string + status string + } + var batteries []Battery + + batteryNb := 0 if config.Batteries == nil { files, err := ioutil.ReadDir(batteryPath) if err != nil { panic(err) } for _, file := range files { - path := filepath.Join(batteryPath, file.Name(), "capacity") - batteries = append(batteries, path) + capPath := filepath.Join(batteryPath, file.Name(), "capacity") + statusPath := filepath.Join(batteryPath, file.Name(), "status") + batteries = append(batteries, Battery { + nb: batteryNb, + capacity: readWithDefault(capPath, "0"), + status: labelStatus(config, readWithDefault(statusPath, "N/A")), + }) + batteryNb += 1 } } else { for _, battery := range config.Batteries { - path := filepath.Join(batteryPath, battery, "capacity") - batteries = append(batteries, path) + capPath := filepath.Join(batteryPath, battery, "capacity") + statusPath := filepath.Join(batteryPath, battery, "status") + batteries = append(batteries, Battery { + nb: batteryNb, + capacity: readWithDefault(capPath, "0"), + status: labelStatus(config, readWithDefault(statusPath, "N/A")), + }) + batteryNb += 1 } } - batteryNb := 0 + separator := "" - for _, filePath := range batteries { + for _, bat := range batteries { b.WriteString(separator) - var capacity string - content, err := ioutil.ReadFile(filePath) - if err != nil { - content = []byte("0") - } - capacity = strings.TrimSuffix(string(content), "\n") - b.WriteString(fmt.Sprintf("%v%v: %v%%", config.SubLabel, batteryNb, capacity)) - batteryNb += 1 + b.WriteString(fmt.Sprintf("%v%v: %v%% %v", config.SubLabel, bat.nb, bat.capacity, bat.status)) separator = " " } + return b.String() } |
