From ce18f67217647657961b26ec8cbf102d583415aa Mon Sep 17 00:00:00 2001 From: Dmitry Svetlichny Date: Thu, 3 Jul 2025 10:12:28 +0300 Subject: [PATCH 1/3] Update of Duration recording gpx Fixed --- Sources/Helpers/OAGPXUIHelper.h | 1 + Sources/Helpers/OAGPXUIHelper.mm | 28 +++++++++++++++++++ .../Monitoring/OATripRecordingTimeWidget.mm | 7 ++--- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/Sources/Helpers/OAGPXUIHelper.h b/Sources/Helpers/OAGPXUIHelper.h index dc1a244efe..8e17654f64 100644 --- a/Sources/Helpers/OAGPXUIHelper.h +++ b/Sources/Helpers/OAGPXUIHelper.h @@ -36,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN + (NSString *) getDescription:(OASGpxDataItem *)gpx; + (long) getSegmentTime:(OASTrkSegment *)segment; ++ (long)liveTimeSpanForGpx:(OASGpxFile *)gpx withoutGaps:(BOOL)withoutGaps; + (double) getSegmentDistance:(OASTrkSegment *)segment; + (NSArray *) getSortedGPXFilesInfo:(nullable NSString *)dir diff --git a/Sources/Helpers/OAGPXUIHelper.mm b/Sources/Helpers/OAGPXUIHelper.mm index b0ae74b020..ae931fcd89 100644 --- a/Sources/Helpers/OAGPXUIHelper.mm +++ b/Sources/Helpers/OAGPXUIHelper.mm @@ -217,6 +217,34 @@ + (long)getSegmentTime:(OASTrkSegment *)segment return endTime - startTime; } ++ (long)liveTimeSpanForGpx:(OASGpxFile *)gpx withoutGaps:(BOOL)withoutGaps +{ + long totalActiveDuration = 0; + long earliestSegmentStart = LLONG_MAX; + long latestSegmentEnd = 0; + for (OASTrack *track in gpx.tracks) + { + for (OASTrkSegment *segment in track.segments) + { + NSArray *points = segment.points; + if (points.count <= 1) + continue; + + long segmentDuration = [self getSegmentTime:segment]; + totalActiveDuration += segmentDuration; + long segmentStartTime = ((OASWptPt *)points.firstObject).time; + long segmentEndTime = ((OASWptPt *)points.lastObject).time; + earliestSegmentStart = MIN(earliestSegmentStart, segmentStartTime); + latestSegmentEnd = MAX(latestSegmentEnd, segmentEndTime); + } + } + + if (earliestSegmentStart == LLONG_MAX) + return 0; + + return withoutGaps ? totalActiveDuration : (latestSegmentEnd - earliestSegmentStart); +} + + (double) getSegmentDistance:(OASTrkSegment *)segment { double distance = 0; diff --git a/Sources/Plugins/Monitoring/OATripRecordingTimeWidget.mm b/Sources/Plugins/Monitoring/OATripRecordingTimeWidget.mm index 0ba3e96377..a8a97484a5 100644 --- a/Sources/Plugins/Monitoring/OATripRecordingTimeWidget.mm +++ b/Sources/Plugins/Monitoring/OATripRecordingTimeWidget.mm @@ -36,11 +36,8 @@ - (instancetype)initWithСustomId:(NSString *)customId [weakSelf setIcon:@"widget_track_recording_duration"]; OASGpxFile *currentTrack = [OASavingTrackHelper sharedInstance].currentTrack; - BOOL withoutGaps = ![[OAAppSettings sharedManager].currentTrackIsJoinSegments get] && - ((!currentTrack.tracks || currentTrack.tracks.count == 0) || currentTrack.tracks[0].generalTrack); - - OASGpxTrackAnalysis *analysis = [currentTrack getAnalysisFileTimestamp:0]; - long timeSpan = withoutGaps ? analysis.timeSpanWithoutGaps : analysis.timeSpan; + BOOL withoutGaps = ![[OAAppSettings sharedManager].currentTrackIsJoinSegments get]; + long timeSpan = [OAGPXUIHelper liveTimeSpanForGpx:currentTrack withoutGaps:withoutGaps]; if (cachedTimeSpan != timeSpan) { From fd2ca4b585731521784bd28472ec615b657740e1 Mon Sep 17 00:00:00 2001 From: Dmitry Svetlichny Date: Fri, 4 Jul 2025 10:39:49 +0300 Subject: [PATCH 2/3] add LONG_MAX --- Sources/Helpers/OAGPXUIHelper.mm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/Helpers/OAGPXUIHelper.mm b/Sources/Helpers/OAGPXUIHelper.mm index ae931fcd89..c0fc050038 100644 --- a/Sources/Helpers/OAGPXUIHelper.mm +++ b/Sources/Helpers/OAGPXUIHelper.mm @@ -220,14 +220,14 @@ + (long)getSegmentTime:(OASTrkSegment *)segment + (long)liveTimeSpanForGpx:(OASGpxFile *)gpx withoutGaps:(BOOL)withoutGaps { long totalActiveDuration = 0; - long earliestSegmentStart = LLONG_MAX; + long earliestSegmentStart = LONG_MAX; long latestSegmentEnd = 0; for (OASTrack *track in gpx.tracks) { for (OASTrkSegment *segment in track.segments) { NSArray *points = segment.points; - if (points.count <= 1) + if (points.count < 2) continue; long segmentDuration = [self getSegmentTime:segment]; @@ -239,7 +239,7 @@ + (long)liveTimeSpanForGpx:(OASGpxFile *)gpx withoutGaps:(BOOL)withoutGaps } } - if (earliestSegmentStart == LLONG_MAX) + if (earliestSegmentStart == LONG_MAX) return 0; return withoutGaps ? totalActiveDuration : (latestSegmentEnd - earliestSegmentStart); From d31209f9e6f754c82818994f7372ee14283ca43a Mon Sep 17 00:00:00 2001 From: Dmitry Svetlichny Date: Fri, 4 Jul 2025 11:21:31 +0300 Subject: [PATCH 3/3] fix space --- Sources/Helpers/OAGPXUIHelper.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Helpers/OAGPXUIHelper.mm b/Sources/Helpers/OAGPXUIHelper.mm index c0fc050038..0c5fc86ca0 100644 --- a/Sources/Helpers/OAGPXUIHelper.mm +++ b/Sources/Helpers/OAGPXUIHelper.mm @@ -235,7 +235,7 @@ + (long)liveTimeSpanForGpx:(OASGpxFile *)gpx withoutGaps:(BOOL)withoutGaps long segmentStartTime = ((OASWptPt *)points.firstObject).time; long segmentEndTime = ((OASWptPt *)points.lastObject).time; earliestSegmentStart = MIN(earliestSegmentStart, segmentStartTime); - latestSegmentEnd = MAX(latestSegmentEnd, segmentEndTime); + latestSegmentEnd = MAX(latestSegmentEnd, segmentEndTime); } }