mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[AltWidget] Fixes not updating when app is near/past expiration
This commit is contained in:
@@ -102,33 +102,43 @@ 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) }
|
||||||
|
|
||||||
|
let currentDate = Calendar.current.startOfDay(for: Date())
|
||||||
|
let numberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: currentDate)
|
||||||
|
|
||||||
var entries: [AppEntry] = []
|
|
||||||
|
|
||||||
// Generate a timeline consisting of one entry per day.
|
// Generate a timeline consisting of one entry per day.
|
||||||
|
var entries: [AppEntry] = []
|
||||||
if let snapshot = snapshot
|
|
||||||
|
switch numberOfDays
|
||||||
{
|
{
|
||||||
let currentDate = Calendar.current.startOfDay(for: Date())
|
case ..<0:
|
||||||
let numberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: currentDate)
|
let entry = AppEntry(date: currentDate, relevance: TimelineEntryRelevance(score: 0.0), app: snapshot)
|
||||||
|
entries.append(entry)
|
||||||
|
|
||||||
if numberOfDays >= 0
|
case 0:
|
||||||
{
|
let entry = AppEntry(date: currentDate, relevance: TimelineEntryRelevance(score: 1.0), app: snapshot)
|
||||||
for dayOffset in 0 ..< min(numberOfDays, 7)
|
entries.append(entry)
|
||||||
{
|
|
||||||
guard let entryDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: currentDate) else { continue }
|
default:
|
||||||
|
// To reduce memory consumption, we only generate entries for the next week. This includes:
|
||||||
let score = Float(dayOffset + 1) / Float(numberOfDays)
|
// * 1 for each day the app is valid (up to 7)
|
||||||
let entry = AppEntry(date: entryDate, relevance: TimelineEntryRelevance(score: score), app: snapshot)
|
// * 1 "0 days remaining"
|
||||||
entries.append(entry)
|
// * 1 "Expired"
|
||||||
}
|
let numberOfEntries = min(numberOfDays, 7) + 2
|
||||||
}
|
|
||||||
else
|
let appEntries = (0 ..< numberOfEntries).map { (dayOffset) -> AppEntry in
|
||||||
{
|
let entryDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: currentDate) ?? currentDate.addingTimeInterval(Double(dayOffset) * 60 * 60 * 24)
|
||||||
let entry = AppEntry(date: Date(), app: snapshot)
|
|
||||||
entries.append(entry)
|
let daysSinceRefresh = entryDate.numberOfCalendarDays(since: snapshot.refreshedDate)
|
||||||
|
let totalNumberOfDays = snapshot.expirationDate.numberOfCalendarDays(since: snapshot.refreshedDate)
|
||||||
|
|
||||||
|
let score = (entryDate <= snapshot.expirationDate) ? Float(daysSinceRefresh + 1) / Float(totalNumberOfDays + 1) : 0 // Expired apps have a score of 0.
|
||||||
|
let entry = AppEntry(date: entryDate, relevance: TimelineEntryRelevance(score: score), app: snapshot)
|
||||||
|
return entry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entries.append(contentsOf: appEntries)
|
||||||
}
|
}
|
||||||
|
|
||||||
let timeline = Timeline(entries: entries, policy: .atEnd)
|
let timeline = Timeline(entries: entries, policy: .atEnd)
|
||||||
|
|||||||
Reference in New Issue
Block a user