From d5336cc01e826e352b6a6eef2400f529a3e3c073 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Wed, 27 May 2026 17:54:05 +0100 Subject: [PATCH] fixed a problem with the transforms that would just error out if the value was nil --- providers/iracing/commonTransforms.go | 18 +++++++++++ providers/iracing/iracing.go | 43 ++++++++++++++++++++------- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/providers/iracing/commonTransforms.go b/providers/iracing/commonTransforms.go index eb1cf32..5b3f569 100644 --- a/providers/iracing/commonTransforms.go +++ b/providers/iracing/commonTransforms.go @@ -40,15 +40,33 @@ func PitSpeedLimiterTransform(v any, out *telem.TelemetryField) { func UInt8Transform(v any, out *telem.TelemetryField) { out.Type = telem.DataTypeUINT8 + + if v == nil { + out.Raw = 0 + return + } + out.Raw = uint64(v.(int)) } func FloatToStringTransform(v any, out *telem.TelemetryField) { out.Type = telem.DataTypeSTRING + + if v == nil { + out.Str = "inv" + return + } + out.Str = strconv.FormatFloat(float64(v.(float32)), 'f', 1, 32) } func FloatToUInt8Transform(v any, out *telem.TelemetryField) { out.Type = telem.DataTypeUINT8 + + if v == nil { + out.Raw = uint64(0) + return + } + out.Raw = uint64(v.(float32)) } diff --git a/providers/iracing/iracing.go b/providers/iracing/iracing.go index 8103db0..5e1277b 100644 --- a/providers/iracing/iracing.go +++ b/providers/iracing/iracing.go @@ -6,9 +6,7 @@ package iracing import ( "context" "fmt" - "log" "log/slog" - "os" "strconv" "sync" "time" @@ -44,17 +42,21 @@ func NewIRacingProvider( ) (*IRacing, error) { var err error - // Open the input file if provided - var file *os.File = nil - if source != "" { - file, err = os.Open(source) - if err != nil { - log.Fatalf("Failed to open IBT file: %v", err) - } - } + // Open the input file if provided - otherwise live telemetry was requested + // Maybe this can be changed so we don't have to run it with these ifs but by configuring our + // provider + // var file goirsdk.Reader = nil + // if source != "" { + // file, err = os.Open(source) + // if err != nil { + // return &IRacing{}, err + // // log.Fatalf("Failed to open IBT file: %v", err) + // } + // } - sdk, err := goirsdk.Init(file, telemOut, yamlOut) + sdk, err := goirsdk.Init(nil, telemOut, yamlOut) if err != nil { + logger.Error("failed to open the IRSDK instance") return &IRacing{}, err } @@ -68,11 +70,30 @@ func NewIRacingProvider( }, nil } +func (i *IRacing) isDataAvailable() bool { + // Its offline telemetry, data must be available + if i.SDK.File != nil { + return true + } + + // Check if live telemetry is on + if i.SDK.IsConnected() { + return true + } + + return false +} + func (i *IRacing) stream(ctx context.Context) { i.data.InitialTime = time.Now() go func() { for { + // We start by checking if we do or do not have data available + if !i.isDataAvailable() { + continue + } + select { case <-ctx.Done(): return