diff options
| -rw-r--r-- | cli/cli.go | 4 | ||||
| -rw-r--r-- | ride/ride.go | 6 |
2 files changed, 8 insertions, 2 deletions
@@ -3,6 +3,7 @@ package cli import ( "context" "database/sql" + "errors" "flag" "fmt" "log/slog" @@ -94,6 +95,9 @@ func runBacktest(db *sql.DB) error { } parsed, err := ride.ParseFile(ride.GPXRideParser{}, item.GPXPath) if err != nil { + if errors.Is(err, ride.ErrNoTrackPoints) { + continue + } slog.Warn("Failed to parse ride GPX", "ride", item.ExternalID, "file", item.GPXPath, "error", err) continue } diff --git a/ride/ride.go b/ride/ride.go index 152bca4..278880f 100644 --- a/ride/ride.go +++ b/ride/ride.go @@ -17,6 +17,8 @@ import ( const garminTrackPointExtensionNamespace = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1" +var ErrNoTrackPoints = errors.New("ride has no track points") + type Ride struct { distances []float64 elevations []float64 @@ -91,11 +93,11 @@ func (p GPXRideParser) Parse(reader io.Reader) (Ride, error) { return Ride{}, err } if len(content.Tracks) == 0 || len(content.Tracks[0].Segments) == 0 { - return Ride{}, errors.New("ride has no track segment") + return Ride{}, ErrNoTrackPoints } segment := content.Tracks[0].Segments[0] if len(segment.Points) == 0 { - return Ride{}, errors.New("ride has no track points") + return Ride{}, ErrNoTrackPoints } distances := make([]float64, 0, len(segment.Points)) elevations := make([]float64, 0, len(segment.Points)) |
