implement lap edit
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user