summaryrefslogtreecommitdiffstats
path: root/Solsnu.Widget/Solsnu_Widget.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Solsnu.Widget/Solsnu_Widget.swift')
-rw-r--r--Solsnu.Widget/Solsnu_Widget.swift45
1 files changed, 32 insertions, 13 deletions
diff --git a/Solsnu.Widget/Solsnu_Widget.swift b/Solsnu.Widget/Solsnu_Widget.swift
index 1021db1..980725e 100644
--- a/Solsnu.Widget/Solsnu_Widget.swift
+++ b/Solsnu.Widget/Solsnu_Widget.swift
@@ -21,13 +21,21 @@ struct Provider: TimelineProvider {
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SolvervEntry] = []
let currentDate = Date()
- for hourOffset in 0 ..< 5 {
- let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
- let entry = SolvervEntry(def: SolvervDef(date: currentDate))
- entries.append(entry)
- }
- let timeline = Timeline(entries: entries, policy: .atEnd)
+ // Single entry for today
+ let entry = SolvervEntry(def: SolvervDef(date: currentDate))
+ entries.append(entry)
+
+ // Calculate next midnight for refresh
+ let calendar = Calendar.current
+ var components = calendar.dateComponents([.year, .month, .day], from: currentDate)
+ components.hour = 0
+ components.minute = 0
+ components.second = 0
+ let todayMidnight = calendar.date(from: components)!
+ let nextMidnight = calendar.date(byAdding: .day, value: 1, to: todayMidnight)!
+
+ let timeline = Timeline(entries: entries, policy: .after(nextMidnight))
completion(timeline)
}
}
@@ -133,20 +141,31 @@ struct SolvervDef {
}
extension SolvervDef {
- var season: String {
- // Will be fully implemented in Task 7
- return "winter"
+ var season: Season {
+ guard let next = nextEvent else { return .winter }
+ return next.season
+ }
+
+ var nextEvent: SolsticeEvent? {
+ SolsticeData.shared.nextEvent()
}
func daysUntilNext() -> Int {
- return 0
+ guard let next = nextEvent else { return 0 }
+ return next.daysUntil()
}
func progressRatio() -> Double {
- return 0.0
+ guard let progress = SolsticeData.shared.progressToNextEvent() else { return 0.0 }
+ let ratio = Double(progress.elapsed) / Double(progress.total)
+ return max(0, min(1.0, ratio))
+ }
+
+ func upcomingEventsPreview(count: Int) -> [SolsticeEvent] {
+ SolsticeData.shared.upcomingEvents(count: count)
}
- func upcomingEventsPreview(count: Int) -> [String] {
- return []
+ static var preview: SolvervDef {
+ SolvervDef(date: Date())
}
}