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 selectedWorkout: StoredWorkout?
@Published var currentSetIndex = 0 @Published var currentSetIndex = 0
@Published var currentRep = 0 @Published var currentRep = 0
@Published var currentLapDistance = 0 @Published var currentRepDistanceSwum: Int = 0
@Published var elapsedSeconds: TimeInterval = 0 @Published var elapsedSeconds: TimeInterval = 0
@Published var heartRate: Double = 0 @Published var heartRate: Double = 0
@Published var activeCalories: Double = 0 @Published var activeCalories: Double = 0
@@ -157,6 +157,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
completedLaps = [] completedLaps = []
healthKitLapCount = 0 healthKitLapCount = 0
currentStrokeCount = 0 currentStrokeCount = 0
currentRepDistanceSwum = 0
startHealthKitWorkout(poolLength: selectedWorkout?.poolLength ?? 25) startHealthKitWorkout(poolLength: selectedWorkout?.poolLength ?? 25)
startHeartRateQuery() startHeartRateQuery()
@@ -235,6 +236,8 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
guard let workout = selectedWorkout else { return } guard let workout = selectedWorkout else { return }
let currentSet = workout.sets[currentSetIndex] let currentSet = workout.sets[currentSetIndex]
currentRepDistanceSwum = 0
if currentRep + 1 < currentSet.repCount { if currentRep + 1 < currentSet.repCount {
currentRep += 1 currentRep += 1
lapStartTime = Date() lapStartTime = Date()
@@ -296,10 +299,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
} }
var currentSetDistanceSwum: Double { var currentSetDistanceSwum: Double {
guard let workout = selectedWorkout, currentSetIndex < workout.sets.count else { return 0 } completedLaps
let setDistance = workout.sets[currentSetIndex].distancePerRep .filter { $0.setPosition == currentSetIndex + 1 }
let completedInSet = completedLaps.filter { $0.setPosition == currentSetIndex + 1 }.count .reduce(0) { $0 + Double($1.distance) }
return Double(setDistance) * Double(completedInSet)
} }
var currentSetTotalDistance: Double { var currentSetTotalDistance: Double {
@@ -490,11 +492,12 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
let now = Date() let now = Date()
let duration = lapStartTime.map { now.timeIntervalSince($0) } ?? 0 let duration = lapStartTime.map { now.timeIntervalSince($0) } ?? 0
let lapDistance = Int(workout.poolLength)
let lap = CompletedLap( let lap = CompletedLap(
setPosition: currentSetIndex + 1, setPosition: currentSetIndex + 1,
repNumber: currentRep + 1, repNumber: currentRep + 1,
distance: workout.sets[currentSetIndex].distancePerRep, distance: lapDistance,
duration: duration, duration: duration,
heartRate: Int(heartRate), heartRate: Int(heartRate),
strokeType: workout.sets[currentSetIndex].stroke, strokeType: workout.sets[currentSetIndex].stroke,
@@ -503,6 +506,8 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
completedLaps.append(lap) completedLaps.append(lap)
currentStrokeCount = 0 currentStrokeCount = 0
currentRepDistanceSwum += lapDistance
WKInterfaceDevice.current().play(.click) WKInterfaceDevice.current().play(.click)
DispatchQueue.main.async { DispatchQueue.main.async {
@@ -512,7 +517,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
self.lapDetected = false self.lapDetected = false
} }
if currentRepDistanceSwum >= workout.sets[currentSetIndex].distancePerRep {
advanceToNextRep() advanceToNextRep()
}
lapStartTime = Date() lapStartTime = Date()
} }