bar/internal/providers/backlight.go
AKP e5d4c690e7
Alter 5 files
Update main.go
Update i3bar.go
Add backlight.go
Update cpu.go
Update providers.go
2025-03-05 01:26:53 +00:00

92 lines
1.6 KiB
Go

package providers
import (
"fmt"
"os"
"strconv"
"strings"
"time"
"github.com/codemicro/bar/internal/i3bar"
)
type Backlight struct {
name string
showUntil time.Time
lastValue int
maxValue int
}
func NewBacklight() i3bar.BlockGenerator {
return &Backlight{
name: "backlight",
}
}
func (g *Backlight) Frequency() uint8 {
return 1
}
func (g *Backlight) parseIntFromFile(fname string) (int, error) {
fcont, err := os.ReadFile(fname)
if err != nil {
return 0, err
}
i, err := strconv.Atoi(strings.TrimSpace(string(fcont)))
if err != nil {
return 0, err
}
return i, nil
}
func (g *Backlight) getMaxVal() (int, error) {
if g.maxValue != 0 {
return g.maxValue, nil
}
i, err := g.parseIntFromFile("/sys/class/backlight/intel_backlight/max_brightness")
if err != nil {
return 0, nil
}
g.maxValue = i
return g.maxValue, nil
}
func (g *Backlight) getCurrentVal() (int, error) {
return g.parseIntFromFile("/sys/class/backlight/intel_backlight/brightness")
}
func (g *Backlight) Block(cs *i3bar.ColorSet) (*i3bar.Block, error) {
// this is a sun emoji: ☀
if g.maxValue == 0 {
if _, err := g.getMaxVal(); err != nil {
return nil, err
}
}
if cv, err := g.getCurrentVal(); err != nil {
return nil, err
} else if cv != g.lastValue {
g.lastValue = cv
g.showUntil = time.Now().Add(time.Second * 5)
}
if g.showUntil.After(time.Now()) {
return &i3bar.Block{
Name: g.name,
FullText: fmt.Sprintf("☀ %s%%", leftPad(fmt.Sprint((g.lastValue*100)/g.maxValue), ' ', 3)),
}, nil
}
return nil, nil
}
func (g *Backlight) GetNameAndInstance() (string, string) {
return g.name, ""
}