Skip to content

Commit

Permalink
Add support for entriesToday, and refresh less
Browse files Browse the repository at this point in the history
  • Loading branch information
nkalupahana committed Jan 23, 2025
1 parent 010383c commit 25bef74
Showing 1 changed file with 31 additions and 21 deletions.
52 changes: 31 additions & 21 deletions ios/App/Widgets/StreakWidget.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,18 @@ struct TokenResponse: Decodable {
struct StreakResponse: Decodable {
let streak: Int
let danger: Danger
let entriesToday: Int
}

struct Entry: TimelineEntry {
let date: Date
let streak: Int
let danger: Danger
let error: Bool
let entriesToday: Int

static func errorEntry() -> Entry {
return Entry(date: Date(), streak: 0, danger: .noRecovery, error: true)
return Entry(date: Date(), streak: 0, danger: .noRecovery, error: true, entriesToday: 0)
}
}

Expand Down Expand Up @@ -145,11 +147,10 @@ struct Provider: TimelineProvider {
}

func placeholder(in context: Context) -> Entry {
Entry(date: Date(), streak: 25, danger: Danger.journaledToday, error: false)
Entry(date: Date(), streak: 25, danger: Danger.journaledToday, error: false, entriesToday: 1)
}

func getSnapshot(in context: Context, completion: @escaping (Entry) -> Void) {
print("GETTING DATA")
if context.isPreview {
completion(placeholder(in: context))
} else {
Expand All @@ -160,7 +161,7 @@ struct Provider: TimelineProvider {
switch result {
case .success(let response):
completion(
Entry(date: Date(), streak: response.streak, danger: response.danger, error: false))
Entry(date: Date(), streak: response.streak, danger: response.danger, error: false, entriesToday: response.entriesToday))
case .failure(let error):
print(error)
completion(Entry.errorEntry())
Expand All @@ -178,7 +179,7 @@ struct Provider: TimelineProvider {
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
var entries: [Entry] = []
let currentDate = Date()
let refreshDate = Calendar.current.date(byAdding: .minute, value: 30, to: currentDate)!
let refreshDate = Calendar.current.date(byAdding: .minute, value: 45, to: currentDate)!
getSnapshot(in: context) { entry in
entries.append(entry)
let timeline = Timeline(entries: entries, policy: .after(refreshDate))
Expand All @@ -189,15 +190,26 @@ struct Provider: TimelineProvider {

struct StreakWidgetEntryView: View {
var entry: Provider.Entry
@Environment(\.widgetFamily) var widgetFamily

var body: some View {
VStack {
Text("Time:")
Text(entry.date, style: .time)

Text("Streak:")
Text("\(entry.streak) (\(entry.danger))")
}
switch widgetFamily {
case .systemSmall, .systemMedium:
Text("Time:")
Text(entry.date, style: .time)

Text("Streak:")
Text("\(entry.streak) (\(entry.entriesToday)) (\(entry.danger))")
case .accessoryCircular:
Gauge(value: 1 - (Double(entry.danger.rawValue) / 3)) {
Text("\(entry.streak)")
}
.gaugeStyle(.accessoryCircularCapacity)
default:
Text("oops")
}
}.containerBackground(.fill.tertiary, for: .widget)
}
}

Expand All @@ -206,24 +218,22 @@ struct StreakWidget: Widget {

var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
if #available(iOS 17.0, *) {
StreakWidgetEntryView(entry: entry)
.containerBackground(.fill.tertiary, for: .widget)
} else {
StreakWidgetEntryView(entry: entry)
.padding()
.background()
}
StreakWidgetEntryView(entry: entry)
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
.supportedFamilies([.systemSmall, .systemMedium])
.supportedFamilies([.systemSmall, .systemMedium, .accessoryCircular])
}
}

#Preview(as: .systemSmall) {
StreakWidget()
} timeline: {
Entry(date: Date(), streak: 25, danger: .noRecovery, error: false)
Entry(date: Date(), streak: 25, danger: .noRecovery, error: false, entriesToday: 1)
}

#Preview(as: .accessoryCircular) {
StreakWidget()
} timeline: {
Entry(date: Date(), streak: 25, danger: .journaledYesterday, error: false, entriesToday: 1)
}

0 comments on commit 25bef74

Please sign in to comment.