fix(watch): advance rep based on distance swum instead of lap count

This commit is contained in:
2026-08-12 09:19:54 +02:00
parent debfcf3843
commit b648878414
+13 -6
View File
@@ -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
}
if currentRepDistanceSwum >= workout.sets[currentSetIndex].distancePerRep {
advanceToNextRep()
}
lapStartTime = Date()
}