From e5d4c690e783d82080150e79ff7ef72b272b83a8 Mon Sep 17 00:00:00 2001 From: AKP Date: Wed, 5 Mar 2025 01:26:53 +0000 Subject: [PATCH] Alter 5 files Update main.go Update i3bar.go Add backlight.go Update cpu.go Update providers.go --- cmd/bar/main.go | 3 +- internal/i3bar/i3bar.go | 20 +++---- internal/providers/backlight.go | 92 +++++++++++++++++++++++++++++++++ internal/providers/cpu.go | 6 +-- internal/providers/providers.go | 7 +++ 5 files changed, 111 insertions(+), 17 deletions(-) create mode 100644 internal/providers/backlight.go diff --git a/cmd/bar/main.go b/cmd/bar/main.go index 3d0ba9c..2730f64 100644 --- a/cmd/bar/main.go +++ b/cmd/bar/main.go @@ -53,9 +53,10 @@ func run() error { // providers.NewDisk("/", 30, 10), providers.NewBattery("BAT0", 80, 30, 20), providers.NewWiFi("wlp0s20f3", 75), - providers.NewIPType("wlp0s20f3"), + // providers.NewIPType("wlp0s20f3"), // providers.NewIPAddress("wlp0s20f3"), providers.NewAudioPlayer(32), + providers.NewBacklight(), ) if err := b.Emit([]*i3bar.Block{ diff --git a/internal/i3bar/i3bar.go b/internal/i3bar/i3bar.go index e394d33..6b3ebfa 100644 --- a/internal/i3bar/i3bar.go +++ b/internal/i3bar/i3bar.go @@ -17,13 +17,13 @@ import ( type generatorInfo struct { Provider BlockGenerator HasClickConsumer bool - Last *Block + Last *Block } type I3bar struct { - writer io.Writer - reader io.Reader - updateSignal syscall.Signal + writer io.Writer + reader io.Reader + updateSignal syscall.Signal generators []*generatorInfo tickNumber uint8 @@ -31,9 +31,9 @@ type I3bar struct { func New(writer io.Writer, reader io.Reader, updateSignal syscall.Signal) *I3bar { return &I3bar{ - writer: writer, - reader: reader, - updateSignal: updateSignal, + writer: writer, + reader: reader, + updateSignal: updateSignal, } } @@ -132,12 +132,6 @@ func (b *I3bar) tick(override bool) error { TextColor: defaultColorSet.Bad, } } - if block == nil { - block = &Block{ - FullText: "MISSING", - TextColor: defaultColorSet.Warning, - } - } if block != gen.Last { gen.Last = block diff --git a/internal/providers/backlight.go b/internal/providers/backlight.go new file mode 100644 index 0000000..68de3e5 --- /dev/null +++ b/internal/providers/backlight.go @@ -0,0 +1,92 @@ +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, "" +} diff --git a/internal/providers/cpu.go b/internal/providers/cpu.go index 0117f6d..d5d6402 100644 --- a/internal/providers/cpu.go +++ b/internal/providers/cpu.go @@ -24,7 +24,7 @@ func NewCPU(okThreshold, warningThreshold float32) i3bar.BlockGenerator { m := &CPU{ OkThreshold: okThreshold, WarningThreshold: warningThreshold, - name: "cpu", + name: "cpu", } _ = m.doSample() return m @@ -82,7 +82,7 @@ func (g *CPU) Block(colors *i3bar.ColorSet) (*i3bar.Block, error) { block := &i3bar.Block{ Name: g.name, - FullText: fmt.Sprintf("CPU: %.1f%%", p), + FullText: fmt.Sprintf("CPU: %s%%", leftPad(fmt.Sprintf("%.1f", p), ' ', 4)), ShortText: fmt.Sprintf("C: %.1f%%", p), } @@ -97,4 +97,4 @@ func (g *CPU) Block(colors *i3bar.ColorSet) (*i3bar.Block, error) { func (g *CPU) GetNameAndInstance() (string, string) { return g.name, "" -} \ No newline at end of file +} diff --git a/internal/providers/providers.go b/internal/providers/providers.go index d908be2..c0669d9 100644 --- a/internal/providers/providers.go +++ b/internal/providers/providers.go @@ -19,3 +19,10 @@ func runCommand(program string, args ...string) ([]byte, error) { } return bytes.TrimSpace(out), err } + +func leftPad(x string, c rune, n int) string { + for len(x) < n { + x = string(c) + x + } + return x +}