From b64887841492e039cb154baadae577c28164b62e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Wed, 12 Aug 2026 09:19:54 +0200 Subject: [PATCH] fix(watch): advance rep based on distance swum instead of lap count --- targets/watch/WorkoutManager.swift | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/targets/watch/WorkoutManager.swift b/targets/watch/WorkoutManager.swift index 719a905..eee7232 100644 --- a/targets/watch/WorkoutManager.swift +++ b/targets/watch/WorkoutManager.swift @@ -11,7 +11,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { @Published var selectedWorkout: StoredWorkout? @Published var currentSetIndex = 0 @Published var currentRep = 0 - @Published var currentLapDistance = 0 + @Published var currentRepDistanceSwum: Int = 0 @Published var elapsedSeconds: TimeInterval = 0 @Published var heartRate: Double = 0 @Published var activeCalories: Double = 0 @@ -157,6 +157,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { completedLaps = [] healthKitLapCount = 0 currentStrokeCount = 0 + currentRepDistanceSwum = 0 startHealthKitWorkout(poolLength: selectedWorkout?.poolLength ?? 25) startHeartRateQuery() @@ -235,6 +236,8 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { guard let workout = selectedWorkout else { return } let currentSet = workout.sets[currentSetIndex] + currentRepDistanceSwum = 0 + if currentRep + 1 < currentSet.repCount { currentRep += 1 lapStartTime = Date() @@ -296,10 +299,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { } var currentSetDistanceSwum: Double { - guard let workout = selectedWorkout, currentSetIndex < workout.sets.count else { return 0 } - let setDistance = workout.sets[currentSetIndex].distancePerRep - let completedInSet = completedLaps.filter { $0.setPosition == currentSetIndex + 1 }.count - return Double(setDistance) * Double(completedInSet) + completedLaps + .filter { $0.setPosition == currentSetIndex + 1 } + .reduce(0) { $0 + Double($1.distance) } } var currentSetTotalDistance: Double { @@ -490,11 +492,12 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { let now = Date() let duration = lapStartTime.map { now.timeIntervalSince($0) } ?? 0 + let lapDistance = Int(workout.poolLength) let lap = CompletedLap( setPosition: currentSetIndex + 1, repNumber: currentRep + 1, - distance: workout.sets[currentSetIndex].distancePerRep, + distance: lapDistance, duration: duration, heartRate: Int(heartRate), strokeType: workout.sets[currentSetIndex].stroke, @@ -503,6 +506,8 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { completedLaps.append(lap) currentStrokeCount = 0 + currentRepDistanceSwum += lapDistance + WKInterfaceDevice.current().play(.click) DispatchQueue.main.async { @@ -512,7 +517,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate { self.lapDetected = false } - advanceToNextRep() + if currentRepDistanceSwum >= workout.sets[currentSetIndex].distancePerRep { + advanceToNextRep() + } lapStartTime = Date() }