From 92a2f740e9d928cd0922326a23c173f7a82be325 Mon Sep 17 00:00:00 2001 From: Jan De Dobbeleer Date: Thu, 15 Apr 2021 11:04:11 +0200 Subject: [PATCH] refactor: move battery logic to segment --- src/environment.go | 28 +++------------------------- src/segment_battery.go | 20 ++++++++++++++++++-- src/segment_battery_test.go | 14 ++++++++++---- src/segment_path_test.go | 4 ++-- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/environment.go b/src/environment.go index 51506ca8..9b1bb941 100644 --- a/src/environment.go +++ b/src/environment.go @@ -64,7 +64,7 @@ type environmentInfo interface { lastErrorCode() int executionTime() float64 getArgs() *args - getBatteryInfo() (*battery.Battery, error) + getBatteryInfo() ([]*battery.Battery, error) getShellName() string getWindowTitle(imageName, windowTitleRegex string) (string, error) doGet(url string) ([]byte, error) @@ -246,30 +246,8 @@ func (env *environment) getArgs() *args { return env.args } -func (env *environment) getBatteryInfo() (*battery.Battery, error) { - getMostLogicalState := func(currentState battery.State, state battery.State) battery.State { - if currentState == battery.Unknown { - return state - } - if currentState == battery.Empty|battery.Full && state == battery.Charging|battery.Discharging { - return state - } - return battery.Charging - } - batteries, err := battery.GetAll() - if err != nil { - return nil, err - } - if batteries == nil { - return nil, &noBatteryError{} - } - batt := &battery.Battery{} - for _, bt := range batteries { - batt.Current += bt.Current - batt.Full += bt.Full - batt.State = getMostLogicalState(batt.State, bt.State) - } - return batt, nil +func (env *environment) getBatteryInfo() ([]*battery.Battery, error) { + return battery.GetAll() } func (env *environment) getShellName() string { diff --git a/src/segment_battery.go b/src/segment_battery.go index 0a5ae8a4..c6b37b62 100644 --- a/src/segment_battery.go +++ b/src/segment_battery.go @@ -33,12 +33,18 @@ const ( ) func (b *batt) enabled() bool { - var err error - b.Battery, err = b.env.getBatteryInfo() + batteries, err := b.env.getBatteryInfo() if !b.enabledWhileError(err) { return false } + b.Battery = &battery.Battery{} + for _, bt := range batteries { + b.Battery.Current += bt.Current + b.Battery.Full += bt.Full + b.Battery.State = b.mapMostLogicalState(b.Battery.State, bt.State) + } + display := b.props.getBool(DisplayCharging, true) if !display && (b.Battery.State == battery.Charging || b.Battery.State == battery.Full) { return false @@ -93,6 +99,16 @@ func (b *batt) enabledWhileError(err error) bool { return true } +func (b *batt) mapMostLogicalState(currentState battery.State, state battery.State) battery.State { + if currentState == battery.Unknown { + return state + } + if currentState == battery.Empty|battery.Full && state == battery.Charging|battery.Discharging { + return state + } + return battery.Charging +} + func (b *batt) string() string { segmentTemplate := b.props.getString(SegmentTemplate, "{{.Icon}}{{ if not .Error }}{{.Percentage}}{{ end }}{{.Error}}") template := &textTemplate{ diff --git a/src/segment_battery_test.go b/src/segment_battery_test.go index b345b84c..919501a7 100644 --- a/src/segment_battery_test.go +++ b/src/segment_battery_test.go @@ -19,7 +19,10 @@ func setupBatteryTests(state battery.State, batteryLevel float64, props *propert Full: 100, Current: batteryLevel, } - env.On("getBatteryInfo", nil).Return(bt, nil) + batteries := []*battery.Battery{ + bt, + } + env.On("getBatteryInfo", nil).Return(batteries, nil) b := &batt{ props: props, env: env, @@ -121,7 +124,8 @@ func TestBatteryForegroundColorInvalid(t *testing.T) { func TestBatteryError(t *testing.T) { env := &MockedEnvironment{} err := errors.New("oh snap") - env.On("getBatteryInfo", nil).Return(&battery.Battery{}, err) + batteries := []*battery.Battery{} + env.On("getBatteryInfo", nil).Return(batteries, err) b := &batt{ props: &properties{ values: map[Property]interface{}{ @@ -137,7 +141,8 @@ func TestBatteryError(t *testing.T) { func TestBatteryErrorHidden(t *testing.T) { env := &MockedEnvironment{} err := errors.New("oh snap") - env.On("getBatteryInfo", nil).Return(&battery.Battery{}, err) + batteries := []*battery.Battery{} + env.On("getBatteryInfo", nil).Return(batteries, err) b := &batt{ props: &properties{ values: map[Property]interface{}{ @@ -152,7 +157,8 @@ func TestBatteryErrorHidden(t *testing.T) { func TestBatteryNoBattery(t *testing.T) { env := &MockedEnvironment{} err := &noBatteryError{} - env.On("getBatteryInfo", nil).Return(&battery.Battery{}, err) + batteries := []*battery.Battery{} + env.On("getBatteryInfo", nil).Return(batteries, err) b := &batt{ props: &properties{ values: map[Property]interface{}{ diff --git a/src/segment_path_test.go b/src/segment_path_test.go index d23712b0..f5aa0385 100644 --- a/src/segment_path_test.go +++ b/src/segment_path_test.go @@ -107,9 +107,9 @@ func (env *MockedEnvironment) getArgs() *args { return arguments.Get(0).(*args) } -func (env *MockedEnvironment) getBatteryInfo() (*battery.Battery, error) { +func (env *MockedEnvironment) getBatteryInfo() ([]*battery.Battery, error) { args := env.Called(nil) - return args.Get(0).(*battery.Battery), args.Error(1) + return args.Get(0).([]*battery.Battery), args.Error(1) } func (env *MockedEnvironment) getShellName() string {