diff options
| author | ivar <i@oiee.no> | 2026-03-24 00:08:56 +0100 |
|---|---|---|
| committer | ivar <i@oiee.no> | 2026-03-24 00:08:56 +0100 |
| commit | 0b9bfd04af48af213fc139781e8cb5ca5be1d439 (patch) | |
| tree | 3e9938297d7ca1b5197257b3d08303189243a8f7 /Solsnu.Widget | |
| parent | 8395dc01bd38e49d98f00d051e60ee9dbcc6a8f1 (diff) | |
| download | solverv-0b9bfd04af48af213fc139781e8cb5ca5be1d439.tar.xz solverv-0b9bfd04af48af213fc139781e8cb5ca5be1d439.zip | |
feat: add sunrise/sunset properties to SolvervDef
Diffstat (limited to 'Solsnu.Widget')
| -rw-r--r-- | Solsnu.Widget/Solsnu_Widget.swift | 86 |
1 files changed, 28 insertions, 58 deletions
diff --git a/Solsnu.Widget/Solsnu_Widget.swift b/Solsnu.Widget/Solsnu_Widget.swift index 78ad05b..aeadf64 100644 --- a/Solsnu.Widget/Solsnu_Widget.swift +++ b/Solsnu.Widget/Solsnu_Widget.swift @@ -21,12 +21,8 @@ struct Provider: TimelineProvider { func getTimeline(in context: Context, completion: @escaping (Timeline<SolvervEntry>) -> ()) { var entries: [SolvervEntry] = [] let currentDate = Date() - - // 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 @@ -42,27 +38,11 @@ struct Provider: TimelineProvider { struct SolvervEntry: TimelineEntry { let date: Date - let emoji: String let def: SolvervDef init(def: SolvervDef, date: Date? = nil) { self.date = date ?? def.date - self.emoji = def.emoji() - self.def = def; - } -} - -struct Solsnu_WidgetEntryView : View { - var entry: Provider.Entry - - var body: some View { - VStack { - Text("Time:") - Text(entry.date, style: .time) - - Text("Emoji:") - Text(entry.emoji) - } + self.def = def } } @@ -71,73 +51,63 @@ struct Solsnu_Widget: Widget { var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: Provider()) { entry in - if #available(iOS 17.0, *) { - SmallWidgetView(entry: entry) - .containerBackground(.fill.tertiary, for: .widget) - } else { SmallWidgetView(entry: entry) - .padding() - .background() - } } + .contentMarginsDisabled() .configurationDisplayName("Solstice Countdown") .description("Days until next solstice or equinox") - .supportedFamilies([.systemSmall]) + .supportedFamilies([.systemSmall,.systemMedium]) } } #Preview(as: .systemSmall) { Solsnu_Widget() } timeline: { - SolvervEntry(def: SolvervDef(utcString: "2025-09-22 18:20:00")) - SolvervEntry(def: SolvervDef(utcString: "2025-12-21 15:03:00")) SolvervEntry(def: SolvervDef(utcString: "2026-03-20 14:46:00")) SolvervEntry(def: SolvervDef(utcString: "2026-06-21 08:25:00")) SolvervEntry(def: SolvervDef(utcString: "2026-09-23 00:06:00")) SolvervEntry(def: SolvervDef(utcString: "2026-12-21 20:50:00")) - SolvervEntry(def: SolvervDef(utcString: "2027-03-20 20:25:00")) - SolvervEntry(def: SolvervDef(utcString: "2027-06-21 14:11:00")) - SolvervEntry(def: SolvervDef(utcString: "2027-09-23 06:02:00")) - SolvervEntry(def: SolvervDef(utcString: "2027-12-22 02:43:00")) - SolvervEntry(def: SolvervDef(utcString: "2028-03-20 02:17:00")) - SolvervEntry(def: SolvervDef(utcString: "2028-06-20 20:02:00")) - SolvervEntry(def: SolvervDef(utcString: "2028-09-22 11:45:00")) - SolvervEntry(def: SolvervDef(utcString: "2028-12-21 08:20:00")) - SolvervEntry(def: SolvervDef(utcString: "2029-03-20 08:01:00")) - SolvervEntry(def: SolvervDef(utcString: "2029-06-21 01:48:00")) - SolvervEntry(def: SolvervDef(utcString: "2029-09-22 17:37:00")) - SolvervEntry(def: SolvervDef(utcString: "2029-12-21 14:14:00")) - SolvervEntry(def: SolvervDef(utcString: "2030-03-20 13:51:00")) - SolvervEntry(def: SolvervDef(utcString: "2030-06-21 07:31:00")) - SolvervEntry(def: SolvervDef(utcString: "2030-09-22 23:27:00")) - SolvervEntry(def: SolvervDef(utcString: "2030-12-21 20:09:00")) } struct SolvervDef { let date: Date; + let bg: String; + let sunriseTime: Date?; + let sunsetTime: Date?; - init(date:Date) { + init(date: Date, sunriseTime: Date? = nil, sunsetTime: Date? = nil) { self.date = date; + self.sunriseTime = sunriseTime; + self.sunsetTime = sunsetTime; + self.bg = "smallbg"; } - init(utcString:String) { + init(utcString: String, sunriseTime: Date? = nil, sunsetTime: Date? = nil) { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" formatter.timeZone = TimeZone(abbreviation: "UTC") // Should probably guard this, but not now let date = formatter.date(from: utcString)! self.date = date + self.sunriseTime = sunriseTime + self.sunsetTime = sunsetTime + self.bg = "smallbg" } - func emoji() -> String { - let components = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute], from: date) - let hour = components.hour! - let minute = components.minute! - if hour == 2 && minute == 43 { - return "😀" - } else { - return "" - } + var sunriseFormatted: String { + guard let time = sunriseTime else { return "" } + let formatter = DateFormatter() + formatter.dateFormat = "HH:mm" + formatter.timeZone = TimeZone.current + return formatter.string(from: time) + } + + var sunsetFormatted: String { + guard let time = sunsetTime else { return "" } + let formatter = DateFormatter() + formatter.dateFormat = "HH:mm" + formatter.timeZone = TimeZone.current + return formatter.string(from: time) } } |
