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