forked from davidscholberg/goblocks
/
wifi.go
49 lines (46 loc) · 1.19 KB
/
wifi.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package modules
import (
"fmt"
"github.com/davidscholberg/go-i3barjson"
"io/ioutil"
"strings"
)
// Wifi represents the configuration for the wifi percent block.
type Wifi struct {
BlockConfigBase `yaml:",inline"`
IfaceName string `yaml:"interface_name"`
CritQuality float64 `yaml:"crit_quality"`
}
// UpdateBlock updates the wifi block's status.
func (c Wifi) UpdateBlock(b *i3barjson.Block) {
b.Color = c.Color
fullTextFmt := fmt.Sprintf("%s%%d%%%%", c.Label)
var wifiSignal float64
var ignore string
wifiPath := "/proc/net/wireless"
wifiStats, err := ioutil.ReadFile(wifiPath)
if err != nil {
b.Urgent = true
b.FullText = fmt.Sprintf(fullTextFmt, err.Error())
return
}
wifiLines := strings.Split(string(wifiStats), "\n")
for _, wifiLine := range wifiLines {
if strings.HasPrefix(wifiLine, c.IfaceName) {
_, err := fmt.Sscan(wifiLine, &ignore, &ignore, &wifiSignal)
if err != nil {
b.Urgent = true
b.FullText = fmt.Sprintf(fullTextFmt, err.Error())
return
}
break
}
}
wifiPercent := (wifiSignal * 100.0) / 70.0
if wifiPercent > c.CritQuality {
b.Urgent = false
} else {
b.Urgent = true
}
b.FullText = fmt.Sprintf(fullTextFmt, int(wifiPercent))
}