Introduces a SwiftUI companion app for the Fail Well PWA: menu bar status item, popover with task list / record / history views, command palette, and a Dynamic Island-style notch overlay that shows the active step and timer beside the hardware notch and expands on hover to reveal pause/next controls.
42 lines
954 B
Swift
42 lines
954 B
Swift
import Foundation
|
|
|
|
struct TaskRecord: Codable, Hashable, Sendable {
|
|
let taskId: String
|
|
var start: Date
|
|
var end: Date?
|
|
var stepRecords: [String: TimeRange]
|
|
var notes: String
|
|
var breakTime: TimeRange?
|
|
var currentStepId: String?
|
|
|
|
init(
|
|
taskId: String,
|
|
start: Date = Date(),
|
|
end: Date? = nil,
|
|
stepRecords: [String: TimeRange] = [:],
|
|
notes: String = "",
|
|
breakTime: TimeRange? = nil,
|
|
currentStepId: String? = nil
|
|
) {
|
|
self.taskId = taskId
|
|
self.start = start
|
|
self.end = end
|
|
self.stepRecords = stepRecords
|
|
self.notes = notes
|
|
self.breakTime = breakTime
|
|
self.currentStepId = currentStepId
|
|
}
|
|
|
|
var isActive: Bool {
|
|
end == nil && currentStepId != nil
|
|
}
|
|
|
|
var isPaused: Bool {
|
|
breakTime != nil && breakTime?.end == nil
|
|
}
|
|
|
|
var hasStarted: Bool {
|
|
!stepRecords.isEmpty
|
|
}
|
|
}
|