refactor: move battery logic to segment

This commit is contained in:
Jan De Dobbeleer 2021-04-15 11:04:11 +02:00 committed by Jan De Dobbeleer
parent 9c4ba43871
commit 92a2f740e9
4 changed files with 33 additions and 33 deletions

View file

@ -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 {

View file

@ -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{

View file

@ -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{}{

View file

@ -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 {