implement lap edit

This commit is contained in:
2026-02-05 00:54:58 +01:00
parent 93cf6f8483
commit 190cfc4071
3 changed files with 234 additions and 33 deletions

View File

@@ -12,9 +12,9 @@ class Stopwatch: ObservableObject, Identifiable, Codable {
struct Lap: Identifiable, Codable {
let id: UUID
let number: Int
let startTime: Date
let endTime: Date
let duration: TimeInterval
var startTime: Date
var endTime: Date
var duration: TimeInterval
}
let id: UUID
@@ -188,4 +188,34 @@ class Stopwatch: ObservableObject, Identifiable, Codable {
var currentRunStartTime: Date? {
return startTime
}
func update(lap: Lap) {
guard let index = laps.firstIndex(where: { $0.id == lap.id }) else { return }
var updatedLap = lap
// Recalculate duration in case start/end times were changed
updatedLap.duration = updatedLap.endTime.timeIntervalSince(updatedLap.startTime)
laps[index] = updatedLap
// Recalculate accumulatedTime from all laps
// Note: This assumes accumulatedTime is strictly the sum of all closed laps.
// If the stopwatch is running, the current "open" lap is not in `laps` yet (it's implicit).
// However, `accumulatedTime` tracks the time *before* the current run started.
// If we edited a *past* lap, we should update accumulatedTime to be the sum of all past laps.
// Let's assume laps are only recorded when paused or when split.
// If we claim `accumulatedTime` is the sum of all stored laps:
let totalLapDuration = laps.reduce(0) { $0 + $1.duration }
accumulatedTime = totalLapDuration
if isRunning {
// function tick() will update elapsedTime naturally, but to be immediate:
if let start = startTime {
elapsedTime = accumulatedTime + Date().timeIntervalSince(start)
}
} else {
elapsedTime = accumulatedTime
}
}
}