diff --git a/bamboohr/calendar.go b/bamboohr/calendar.go index 2b2dadea..4dcb3840 100644 --- a/bamboohr/calendar.go +++ b/bamboohr/calendar.go @@ -1,7 +1,5 @@ package bamboohr -import () - type Calendar struct { Items []Item `xml:"item"` } diff --git a/bamboohr/employee.go b/bamboohr/employee.go index 02d179d6..7cc655bd 100644 --- a/bamboohr/employee.go +++ b/bamboohr/employee.go @@ -1,7 +1,5 @@ package bamboohr -import () - /* * Note: this currently implements the minimum number of fields to fulfill the Away functionality. * Undoubtedly there are more fields than this to an employee diff --git a/jira/issues.go b/jira/issues.go index ecaceb92..a8ad546f 100644 --- a/jira/issues.go +++ b/jira/issues.go @@ -1,8 +1,5 @@ package jira -import ( -) - type Issue struct { Expand string `json:"expand"` ID string `json:"id"` diff --git a/jira/search_result.go b/jira/search_result.go index 66a3f1a8..7febef6d 100644 --- a/jira/search_result.go +++ b/jira/search_result.go @@ -1,7 +1,5 @@ package jira -import () - type SearchResult struct { StartAt int `json:"startAt"` MaxResults int `json:"maxResults"` diff --git a/power/battery.go b/power/battery.go index c837b7f8..08b7fdfe 100644 --- a/power/battery.go +++ b/power/battery.go @@ -1,3 +1,5 @@ +// +build !linux + package power import ( diff --git a/power/battery_linux.go b/power/battery_linux.go new file mode 100644 index 00000000..693d95b6 --- /dev/null +++ b/power/battery_linux.go @@ -0,0 +1,112 @@ +// +build linux + +package power + +import ( + "fmt" + "os/exec" + "strconv" + "strings" + + "github.com/senorprogrammer/wtf/wtf" +) + +var batteryState string + +type Battery struct { + args []string + cmd string + result string + + Charge string + Remaining string +} + +func NewBattery() *Battery { + return &Battery{} +} + +/* -------------------- Exported Functions -------------------- */ + +func (battery *Battery) Refresh() { + data := battery.execute() + battery.result = battery.parse(data) +} + +func (battery *Battery) String() string { + return battery.result +} + +/* -------------------- Unexported Functions -------------------- */ + +func (battery *Battery) execute() string { + cmd := exec.Command("upower", "-e") + lines := strings.Split(wtf.ExecuteCommand(cmd), "\n") + var target string + for _, l := range lines { + if strings.Contains(l, "/battery") { + target = l + break + } + } + cmd = exec.Command("upower", "-i", target) + return wtf.ExecuteCommand(cmd) +} + +func (battery *Battery) parse(data string) string { + lines := strings.Split(data, "\n") + if len(lines) < 2 { + return "unknown" + } + table := make(map[string]string) + for _, line := range lines { + parts := strings.Split(line, ":") + if len(parts) < 2 { + continue + } + table[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) + } + if s := table["time to empty"]; s == "" { + table["time to empty"] = "∞" + } + str := "" + str = str + fmt.Sprintf(" %10s: %s\n", "Charge", battery.formatCharge(table["percentage"])) + str = str + fmt.Sprintf(" %10s: %s\n", "Remaining", table["time to empty"]) + str = str + fmt.Sprintf(" %10s: %s\n", "State", battery.formatState(table["state"])) + if s := table["time to full"]; s != "" { + str = str + fmt.Sprintf(" %10s: %s\n", "TimeToFull", table["time to full"]) + } + batteryState = table["state"] + return str +} + +func (battery *Battery) formatCharge(data string) string { + percent, _ := strconv.ParseFloat(strings.Replace(data, "%", "", -1), 32) + color := "" + + switch { + case percent >= 70: + color = "[green]" + case percent >= 35: + color = "[yellow]" + default: + color = "[red]" + } + + return color + data + "[white]" +} + +func (battery *Battery) formatState(data string) string { + color := "" + + switch data { + case "charging": + color = "[green]" + case "discharging": + color = "[yellow]" + default: + color = "[white]" + } + + return color + data + "[white]" +} diff --git a/power/source.go b/power/source.go index b5f0faff..e6eff36c 100644 --- a/power/source.go +++ b/power/source.go @@ -1,3 +1,5 @@ +// +build !linux + package power import ( diff --git a/power/source_linux.go b/power/source_linux.go new file mode 100644 index 00000000..a28368c8 --- /dev/null +++ b/power/source_linux.go @@ -0,0 +1,15 @@ +// +build linux + +package power + +// powerSource returns the name of the current power source, probably one of +// "AC Power" or "Battery Power" +func powerSource() string { + switch batteryState { + case "charging", "fully-charged": + return "AC Power" + case "discharging": + return "Battery Power" + } + return batteryState +} diff --git a/system/system_info.go b/system/system_info.go index 63fa6770..1582ebe7 100644 --- a/system/system_info.go +++ b/system/system_info.go @@ -22,7 +22,8 @@ func NewSystemInfo() *SystemInfo { var cmd *exec.Cmd switch runtime.GOOS { case "linux": - cmd = exec.Command("uname -a", arg...) + arg = append(arg, "-a") + cmd = exec.Command("lsb_release", arg...) case "darwin": cmd = exec.Command("sw_vers", arg...) default: @@ -33,7 +34,6 @@ func NewSystemInfo() *SystemInfo { for _, row := range strings.Split(raw, "\n") { parts := strings.Split(row, ":") - if len(parts) < 2 { continue } diff --git a/todo/item.go b/todo/item.go index aa77f41e..bc87b897 100644 --- a/todo/item.go +++ b/todo/item.go @@ -1,7 +1,5 @@ package todo -import () - type Item struct { Checked bool Text string diff --git a/wtf/position.go b/wtf/position.go index 5fd02346..521a93b3 100644 --- a/wtf/position.go +++ b/wtf/position.go @@ -1,7 +1,5 @@ package wtf -import () - type Position struct { top int left int diff --git a/wtf_tests/utils_test.go b/wtf_tests/utils_test.go index 9a6c005c..15b0e734 100644 --- a/wtf_tests/utils_test.go +++ b/wtf_tests/utils_test.go @@ -3,8 +3,8 @@ package wtf_tests import ( "testing" - . "github.com/senorprogrammer/wtf/wtf" "github.com/go-test/deep" + . "github.com/senorprogrammer/wtf/wtf" ) /* -------------------- Exclude() -------------------- */