Compare commits
3 Commits
e0dd2f1fbc
...
d37170fc5d
| Author | SHA1 | Date | |
|---|---|---|---|
| d37170fc5d | |||
| fc3b7d7c2c | |||
| 32cb200408 |
@@ -116,6 +116,7 @@ struct TimerView: View {
|
||||
.buttonStyle(.borderedProminent)
|
||||
.tint(.red)
|
||||
.controlSize(.large)
|
||||
.disabled(viewModel.selectedProject == nil && viewModel.activeTimer?.project == nil)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, 24)
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array/>
|
||||
<array>
|
||||
<string>group.simonfranken.timetracker</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array/>
|
||||
<array>
|
||||
<string>group.simonfranken.timetracker</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -12,6 +12,9 @@ struct WidgetTimer: Codable {
|
||||
let id: String
|
||||
let startTime: String
|
||||
let projectId: String?
|
||||
let project: WidgetProjectReference?
|
||||
let createdAt: String
|
||||
let updatedAt: String
|
||||
|
||||
var elapsedTime: TimeInterval {
|
||||
guard let start = ISO8601DateFormatter().date(from: startTime) else {
|
||||
@@ -21,6 +24,12 @@ struct WidgetTimer: Codable {
|
||||
}
|
||||
}
|
||||
|
||||
struct WidgetProjectReference: Codable {
|
||||
let id: String
|
||||
let name: String
|
||||
let color: String?
|
||||
}
|
||||
|
||||
struct Provider: TimelineProvider {
|
||||
private let appGroupIdentifier = "group.com.timetracker.app"
|
||||
|
||||
@@ -41,7 +50,8 @@ struct Provider: TimelineProvider {
|
||||
func getTimeline(in context: Context, completion: @escaping (Timeline<TimerEntry>) -> Void) {
|
||||
let entry = loadTimerEntry()
|
||||
|
||||
let nextUpdate = Calendar.current.date(byAdding: .minute, value: 15, to: Date())!
|
||||
// Update every minute to show live timer countdown
|
||||
let nextUpdate = Calendar.current.date(byAdding: .minute, value: 1, to: Date())!
|
||||
let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
|
||||
|
||||
completion(timeline)
|
||||
@@ -63,8 +73,8 @@ struct Provider: TimelineProvider {
|
||||
return TimerEntry(
|
||||
date: Date(),
|
||||
timer: timer,
|
||||
projectName: timer.projectId,
|
||||
projectColor: nil
|
||||
projectName: timer.project?.name ?? timer.projectId,
|
||||
projectColor: timer.project?.color
|
||||
)
|
||||
} catch {
|
||||
return TimerEntry(
|
||||
|
||||
Reference in New Issue
Block a user