summaryrefslogtreecommitdiff
path: root/statusbar.go
diff options
context:
space:
mode:
authorJulian Hurst <julian.hurst@digdash.com>2024-09-25 10:55:54 +0200
committerJulian Hurst <julian.hurst@digdash.com>2024-09-25 10:55:54 +0200
commitbf36a1dd4a326bf77c0cedbc1734b7676ddbc91a (patch)
tree96e8f2c596f83523813a463697aa88678339b47e /statusbar.go
parentac6db6c9c392bc35fceb9b8123a3619c18a9b242 (diff)
downloadstatusbar-bf36a1dd4a326bf77c0cedbc1734b7676ddbc91a.tar.gz
Add support for battery status with labels
Diffstat (limited to 'statusbar.go')
-rw-r--r--statusbar.go78
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()
}