added basic ui, added working clock and battery indicator
This commit is contained in:
79
battery.go
Normal file
79
battery.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/mattn/go-gtk/glib"
|
||||
)
|
||||
|
||||
func initBattery(a *App) {
|
||||
base := "/sys/class/power_supply"
|
||||
entries, err := os.ReadDir(base)
|
||||
if err != nil {
|
||||
fmt.Println("battery init:", err)
|
||||
return
|
||||
}
|
||||
|
||||
var folder string
|
||||
for _, e := range entries {
|
||||
if strings.Contains(strings.ToLower(e.Name()), "bat") {
|
||||
folder = e.Name()
|
||||
break
|
||||
}
|
||||
}
|
||||
if folder == "" {
|
||||
fmt.Println("no battery folder found")
|
||||
return
|
||||
}
|
||||
rootPath := base + "/" + folder
|
||||
|
||||
info, err := readBattery(rootPath)
|
||||
if err != nil {
|
||||
fmt.Println("read battery:", err)
|
||||
return
|
||||
}
|
||||
a.battery = info
|
||||
a.updateBatteryLabel(info)
|
||||
|
||||
go func() {
|
||||
last := info
|
||||
for {
|
||||
cur, err := readBattery(rootPath)
|
||||
if err == nil &&
|
||||
(cur.Percent != last.Percent || cur.Charging != last.Charging) {
|
||||
last = cur
|
||||
a.battery = cur
|
||||
glib.IdleAdd(func() {
|
||||
a.updateBatteryLabel(cur)
|
||||
})
|
||||
}
|
||||
time.Sleep(30 * time.Second)
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
func readBattery(rootPath string) (BatteryInfo, error) {
|
||||
val, err := os.ReadFile(rootPath + "/capacity")
|
||||
if err != nil {
|
||||
return BatteryInfo{}, err
|
||||
}
|
||||
status, err := os.ReadFile(rootPath + "/status")
|
||||
if err != nil {
|
||||
return BatteryInfo{}, err
|
||||
}
|
||||
|
||||
p, err := strconv.Atoi(strings.TrimSpace(string(val)))
|
||||
if err != nil {
|
||||
return BatteryInfo{}, err
|
||||
}
|
||||
|
||||
s := strings.ToLower(strings.TrimSpace(string(status)))
|
||||
charging := !strings.Contains(s, "dis")
|
||||
|
||||
return BatteryInfo{Percent: p, Charging: charging, Path: rootPath}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user