From f7e2cf2a65d6874503b641869b26c70b53cec95c Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 6 Oct 2021 12:18:08 -0700 Subject: [PATCH] Revert "[AltWidget] Waits until the following day to reload timeline if an error occurs" iOS automatically determines how often to refresh widgets based on user's behavior, so we should rely on that instead of artificially delaying timeline reloads until the next day if an error occurs. This reverts commit ec8ef743a39fc80fe52cbf58d4ad86839bfcd4a9. --- AltWidget/AltWidget.swift | 53 +++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/AltWidget/AltWidget.swift b/AltWidget/AltWidget.swift index 8c75dffb..59768eda 100644 --- a/AltWidget/AltWidget.swift +++ b/AltWidget/AltWidget.swift @@ -85,11 +85,6 @@ struct Provider: IntentTimelineProvider func getTimeline(for configuration: ViewAppIntent, in context: Context, completion: @escaping (Timeline) -> Void) { self.prepare { (result) in autoreleasepool { - let currentDate = Calendar.current.startOfDay(for: Date()) - let nextRefreshDate = Calendar.current.date(byAdding: .day, value: 1, to: currentDate) ?? currentDate.addingTimeInterval(1 * 60 * 60 * 24) - - let timeline: Timeline - do { let context = try result.get() @@ -107,38 +102,46 @@ struct Provider: IntentTimelineProvider installedApp = InstalledApp.fetchAltStore(in: context) } - guard let snapshot = installedApp.map(AppSnapshot.init) else { throw ALTError(.invalidApp) } + let snapshot = installedApp.map(AppSnapshot.init) + + var entries: [AppEntry] = [] // Generate a timeline consisting of one entry per day. - let numberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: currentDate) - if numberOfDays >= 0 + + if let snapshot = snapshot { - let entries = (0 ..< min(numberOfDays, 7)).compactMap { dayOffset -> AppEntry? in - guard let entryDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: currentDate) else { return nil } - - let score = Float(dayOffset + 1) / Float(numberOfDays) - - let entry = AppEntry(date: entryDate, relevance: TimelineEntryRelevance(score: score), app: snapshot) - return entry - } + let currentDate = Calendar.current.startOfDay(for: Date()) + let numberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: currentDate) - timeline = Timeline(entries: entries, policy: .atEnd) - } - else - { - let entry = AppEntry(date: Date(), app: snapshot) - timeline = Timeline(entries: [entry], policy: .after(nextRefreshDate)) + if numberOfDays >= 0 + { + for dayOffset in 0 ..< min(numberOfDays, 7) + { + guard let entryDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: currentDate) else { continue } + + let score = Float(dayOffset + 1) / Float(numberOfDays) + let entry = AppEntry(date: entryDate, relevance: TimelineEntryRelevance(score: score), app: snapshot) + entries.append(entry) + } + } + else + { + let entry = AppEntry(date: Date(), app: snapshot) + entries.append(entry) + } } + + let timeline = Timeline(entries: entries, policy: .atEnd) + completion(timeline) } catch { print("Error preparing widget timeline:", error) let entry = AppEntry(date: Date(), app: nil) - timeline = Timeline(entries: [entry], policy: .after(nextRefreshDate)) + let timeline = Timeline(entries: [entry], policy: .atEnd) + completion(timeline) } - - completion(timeline) } } }