From b2d8f85d354f85470f4ac4db302da70bf8563c98 Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Sat, 26 Jul 2025 13:32:13 +0200 Subject: [PATCH] Implement Basecamp GPX import --- CHANGELOG.md | 1 + app/models/point.rb | 2 +- app/services/gpx/track_importer.rb | 8 +++++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 549c693d..c0c88390 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - The Warden error in jobs is now fixed. #1556 - The Live Map setting is now respected. - The Live Map info modal is now displayed. #665 +- GPX from Basecamp is now supported. #790 diff --git a/app/models/point.rb b/app/models/point.rb index 838e59ff..a36a0019 100644 --- a/app/models/point.rb +++ b/app/models/point.rb @@ -17,7 +17,7 @@ class Point < ApplicationRecord index: true } - enum :battery_status, { unknown: 0, unplugged: 1, charging: 2, full: 3 }, suffix: true + enum :battery_status, { unknown: 0, unplugged: 1, charging: 2, full: 3, connected_not_charging: 4 }, suffix: true enum :trigger, { unknown: 0, background_event: 1, circular_region_event: 2, beacon_event: 3, report_location_message_event: 4, manual_event: 5, timer_based_event: 6, diff --git a/app/services/gpx/track_importer.rb b/app/services/gpx/track_importer.rb index 0bb0d516..97e5de00 100644 --- a/app/services/gpx/track_importer.rb +++ b/app/services/gpx/track_importer.rb @@ -81,8 +81,10 @@ class Gpx::TrackImporter def speed(point) return if point['extensions'].blank? - ( - point.dig('extensions', 'speed') || point.dig('extensions', 'TrackPointExtension', 'speed') - ).to_f.round(1) + value = point.dig('extensions', 'speed') + extensions = point.dig('extensions', 'TrackPointExtension') + value ||= extensions.is_a?(Hash) ? extensions.dig('speed') : nil + + value&.to_f&.round(1) || 0 end end