Create an offline vehicle when config fails (#5610)
This commit is contained in:
parent
11ca6aea45
commit
def5886c0a
3 changed files with 25 additions and 8 deletions
|
|
@ -270,14 +270,15 @@ func (cp *ConfigProvider) configureVehicles(conf config) error {
|
|||
|
||||
if ccWithTitle.Title == "" {
|
||||
//lint:ignore SA1019 as Title is safe on ascii
|
||||
cc.Other["title"] = strings.Title(cc.Name)
|
||||
ccWithTitle.Title = strings.Title(cc.Name)
|
||||
cc.Other["title"] = ccWithTitle.Title
|
||||
}
|
||||
|
||||
v, err := vehicle.NewFromConfig(cc.Type, cc.Other)
|
||||
if err != nil {
|
||||
log.ERROR.Printf("creating vehicle %s failed: %v", cc.Name, err)
|
||||
// wrap any created errors to prevent fatals
|
||||
v, _ = wrapper.New(v, err)
|
||||
v, _ = wrapper.New(ccWithTitle.Title, err)
|
||||
}
|
||||
|
||||
mu.Lock()
|
||||
|
|
|
|||
|
|
@ -47,12 +47,12 @@ func (v *embed) OnIdentified() api.ActionConfig {
|
|||
|
||||
var _ api.FeatureDescriber = (*embed)(nil)
|
||||
|
||||
// Features implements the api.Describer interface
|
||||
// Features implements the api.FeatureDescriber interface
|
||||
func (v *embed) Features() []api.Feature {
|
||||
return v.Features_
|
||||
}
|
||||
|
||||
// Features implements the api.Describer interface
|
||||
// Features implements the api.FeatureDescriber interface
|
||||
func (v *embed) Has(f api.Feature) bool {
|
||||
return slices.Contains(v.Features_, f)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,13 +8,17 @@ import (
|
|||
|
||||
// Wrapper wraps an api.Vehicle to capture initialization errors
|
||||
type Wrapper struct {
|
||||
err error
|
||||
err error
|
||||
title string
|
||||
Features_ []api.Feature
|
||||
}
|
||||
|
||||
// New creates a new Vehicle
|
||||
func New(w api.Vehicle, err error) (api.Vehicle, error) {
|
||||
func New(title string, err error) (api.Vehicle, error) {
|
||||
v := &Wrapper{
|
||||
err: fmt.Errorf("vehicle not available: %w", err),
|
||||
err: fmt.Errorf("vehicle not available: %w", err),
|
||||
title: fmt.Sprintf("%s (unavailable)", title),
|
||||
Features_: []api.Feature{api.Offline},
|
||||
}
|
||||
|
||||
return v, nil
|
||||
|
|
@ -24,7 +28,7 @@ var _ api.Vehicle = (*Wrapper)(nil)
|
|||
|
||||
// Title implements the api.Vehicle interface
|
||||
func (v *Wrapper) Title() string {
|
||||
return "unavailable"
|
||||
return v.title
|
||||
}
|
||||
|
||||
// Icon implements the api.Vehicle interface
|
||||
|
|
@ -52,6 +56,18 @@ func (v *Wrapper) OnIdentified() api.ActionConfig {
|
|||
return api.ActionConfig{}
|
||||
}
|
||||
|
||||
var _ api.FeatureDescriber = (*Wrapper)(nil)
|
||||
|
||||
// Features implements the api.FeatureDescriber interface
|
||||
func (v *Wrapper) Features() []api.Feature {
|
||||
return []api.Feature{api.Offline}
|
||||
}
|
||||
|
||||
// Features implements the api.FeatureDescriber interface
|
||||
func (v *Wrapper) Has(f api.Feature) bool {
|
||||
return f == api.Offline
|
||||
}
|
||||
|
||||
var _ api.Battery = (*Wrapper)(nil)
|
||||
|
||||
// Soc implements the api.Battery interface
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue