Don't allow program to crash if there's no active provider on StartStream action

This commit is contained in:
2026-09-17 23:01:50 +01:00
parent 6b09eb5be0
commit 922c2df88d
+13 -9
View File
@@ -16,9 +16,9 @@ type TelemetryService struct {
logger *slog.Logger logger *slog.Logger
devService *DeviceService devService *DeviceService
// Concurrency protection // Concurrency protection
mut sync.RWMutex mut sync.RWMutex
ativeProvider telem.TelemetryProvider activeProvider telem.TelemetryProvider
isConnected bool isConnected bool
// Channel for the UI // Channel for the UI
listeners map[string]chan telem.TelemetryData listeners map[string]chan telem.TelemetryData
cancelForward context.CancelFunc cancelForward context.CancelFunc
@@ -78,12 +78,12 @@ func (t *TelemetryService) SwitchProvider(newProvider telem.TelemetryProvider) e
defer t.mut.Unlock() defer t.mut.Unlock()
// Clean up the current to be old provider // Clean up the current to be old provider
if t.ativeProvider != nil { if t.activeProvider != nil {
t.dropActiveProvider() t.dropActiveProvider()
} }
// Assign the new provider // Assign the new provider
t.ativeProvider = newProvider t.activeProvider = newProvider
return nil return nil
} }
@@ -117,7 +117,7 @@ func (t *TelemetryService) dropActiveProvider() {
t.cancelForward() t.cancelForward()
} }
t.ativeProvider.StopStream() t.activeProvider.StopStream()
} }
func (t *TelemetryService) SubscribeListener(id string, bufferSize int) <-chan telem.TelemetryData { func (t *TelemetryService) SubscribeListener(id string, bufferSize int) <-chan telem.TelemetryData {
@@ -149,14 +149,18 @@ func (t *TelemetryService) UnsubscribeListener(id string) {
} }
func (t *TelemetryService) SubscribeToFields(fields map[int16]telem.FieldID) { func (t *TelemetryService) SubscribeToFields(fields map[int16]telem.FieldID) {
t.ativeProvider.Subscribe(fields) t.activeProvider.Subscribe(fields)
} }
func (t *TelemetryService) StartStream() { func (t *TelemetryService) StartStream() {
slog.Debug("Stream started") slog.Debug("Stream started")
// Start the new stream // Start the new stream
simInCh, _ := t.ativeProvider.Stream() if t.activeProvider == nil {
slog.Debug("there's no active provider. not starting the stream")
return
}
simInCh, _ := t.activeProvider.Stream()
// TODO: the provider needs to be able to tell the data has stopped // TODO: the provider needs to be able to tell the data has stopped
// so we can restart the provider lookup routine // so we can restart the provider lookup routine
@@ -177,5 +181,5 @@ func (t *TelemetryService) StopStream() {
t.cancelForward = nil t.cancelForward = nil
} }
t.ativeProvider.StopStream() t.activeProvider.StopStream()
} }