mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-18 03:03:31 +01:00
[AltWidget] Waits until the following day to reload timeline if an error occurs
This commit is contained in:
@@ -85,6 +85,11 @@ struct Provider: IntentTimelineProvider
|
|||||||
func getTimeline(for configuration: ViewAppIntent, in context: Context, completion: @escaping (Timeline<AppEntry>) -> Void) {
|
func getTimeline(for configuration: ViewAppIntent, in context: Context, completion: @escaping (Timeline<AppEntry>) -> Void) {
|
||||||
self.prepare { (result) in
|
self.prepare { (result) in
|
||||||
autoreleasepool {
|
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<AppEntry>
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let context = try result.get()
|
let context = try result.get()
|
||||||
@@ -102,46 +107,38 @@ struct Provider: IntentTimelineProvider
|
|||||||
installedApp = InstalledApp.fetchAltStore(in: context)
|
installedApp = InstalledApp.fetchAltStore(in: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
let snapshot = installedApp.map(AppSnapshot.init)
|
guard let snapshot = installedApp.map(AppSnapshot.init) else { throw ALTError(.invalidApp) }
|
||||||
|
|
||||||
var entries: [AppEntry] = []
|
|
||||||
|
|
||||||
// Generate a timeline consisting of one entry per day.
|
// Generate a timeline consisting of one entry per day.
|
||||||
|
let numberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: currentDate)
|
||||||
if let snapshot = snapshot
|
if numberOfDays >= 0
|
||||||
{
|
{
|
||||||
let currentDate = Calendar.current.startOfDay(for: Date())
|
let entries = (0 ..< min(numberOfDays, 7)).compactMap { dayOffset -> AppEntry? in
|
||||||
let numberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: currentDate)
|
guard let entryDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: currentDate) else { return nil }
|
||||||
|
|
||||||
if numberOfDays >= 0
|
let score = Float(dayOffset + 1) / Float(numberOfDays)
|
||||||
{
|
|
||||||
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)
|
||||||
let entry = AppEntry(date: entryDate, relevance: TimelineEntryRelevance(score: score), app: snapshot)
|
return entry
|
||||||
entries.append(entry)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
let entry = AppEntry(date: Date(), app: snapshot)
|
|
||||||
entries.append(entry)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeline = Timeline(entries: entries, policy: .atEnd)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let entry = AppEntry(date: Date(), app: snapshot)
|
||||||
|
timeline = Timeline(entries: [entry], policy: .after(nextRefreshDate))
|
||||||
}
|
}
|
||||||
|
|
||||||
let timeline = Timeline(entries: entries, policy: .atEnd)
|
|
||||||
completion(timeline)
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
print("Error preparing widget timeline:", error)
|
print("Error preparing widget timeline:", error)
|
||||||
|
|
||||||
let entry = AppEntry(date: Date(), app: nil)
|
let entry = AppEntry(date: Date(), app: nil)
|
||||||
let timeline = Timeline(entries: [entry], policy: .atEnd)
|
timeline = Timeline(entries: [entry], policy: .after(nextRefreshDate))
|
||||||
completion(timeline)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
completion(timeline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user