mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-13 16:53:29 +01:00
[AltWidget] Fixes incorrect days until expiration
Previously, we used Date() to calculate the number of days until apps expired. This meant all calculations were based on when the widget extension was run — not when it was actually displayed. As a result, this made it seem like the widget never updated since all timeline entries were calculated from the same date. Now, we instead calculate remaining days from AppEntry.date. This means the widget’s remaining days are relative to the current timeline entry’s date, matching what is displayed in AltStore.
This commit is contained in:
@@ -11,15 +11,16 @@ import WidgetKit
|
|||||||
|
|
||||||
struct Countdown: View
|
struct Countdown: View
|
||||||
{
|
{
|
||||||
let startDate: Date?
|
var startDate: Date?
|
||||||
let endDate: Date?
|
var endDate: Date?
|
||||||
|
var currentDate: Date = Date()
|
||||||
|
|
||||||
@Environment(\.font) private var font
|
@Environment(\.font) private var font
|
||||||
|
|
||||||
private var numberOfDays: Int {
|
private var numberOfDays: Int {
|
||||||
guard let date = self.endDate else { return 0 }
|
guard let date = self.endDate else { return 0 }
|
||||||
|
|
||||||
let numberOfDays = date.numberOfCalendarDays(since: Date())
|
let numberOfDays = date.numberOfCalendarDays(since: self.currentDate)
|
||||||
return numberOfDays
|
return numberOfDays
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ struct WidgetView : View
|
|||||||
Group {
|
Group {
|
||||||
if let app = self.entry.app
|
if let app = self.entry.app
|
||||||
{
|
{
|
||||||
let daysRemaining = app.expirationDate.numberOfCalendarDays(since: Date())
|
let daysRemaining = app.expirationDate.numberOfCalendarDays(since: self.entry.date)
|
||||||
|
|
||||||
GeometryReader { (geometry) in
|
GeometryReader { (geometry) in
|
||||||
Group {
|
Group {
|
||||||
@@ -70,7 +70,8 @@ struct WidgetView : View
|
|||||||
if daysRemaining >= 0
|
if daysRemaining >= 0
|
||||||
{
|
{
|
||||||
Countdown(startDate: app.refreshedDate,
|
Countdown(startDate: app.refreshedDate,
|
||||||
endDate: app.expirationDate)
|
endDate: app.expirationDate,
|
||||||
|
currentDate: self.entry.date)
|
||||||
.font(.system(size: 20, weight: .semibold, design: .rounded))
|
.font(.system(size: 20, weight: .semibold, design: .rounded))
|
||||||
.foregroundColor(Color.white)
|
.foregroundColor(Color.white)
|
||||||
.opacity(0.8)
|
.opacity(0.8)
|
||||||
@@ -146,6 +147,7 @@ struct WidgetView_Previews: PreviewProvider {
|
|||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
let shortRefreshedDate = Calendar.current.date(byAdding: .day, value: -2, to: Date()) ?? Date()
|
let shortRefreshedDate = Calendar.current.date(byAdding: .day, value: -2, to: Date()) ?? Date()
|
||||||
let shortExpirationDate = Calendar.current.date(byAdding: .day, value: 7, to: shortRefreshedDate) ?? Date()
|
let shortExpirationDate = Calendar.current.date(byAdding: .day, value: 7, to: shortRefreshedDate) ?? Date()
|
||||||
|
let expiredExpirationDate = Calendar.current.date(byAdding: .day, value: -155, to: Date()) ?? Date()
|
||||||
|
|
||||||
let longRefreshedDate = Calendar.current.date(byAdding: .day, value: -100, to: Date()) ?? Date()
|
let longRefreshedDate = Calendar.current.date(byAdding: .day, value: -100, to: Date()) ?? Date()
|
||||||
let longExpirationDate = Calendar.current.date(byAdding: .day, value: 365, to: longRefreshedDate) ?? Date()
|
let longExpirationDate = Calendar.current.date(byAdding: .day, value: 365, to: longRefreshedDate) ?? Date()
|
||||||
@@ -164,6 +166,13 @@ struct WidgetView_Previews: PreviewProvider {
|
|||||||
tintColor: .deltaPrimary,
|
tintColor: .deltaPrimary,
|
||||||
icon: UIImage(named: "Delta"))
|
icon: UIImage(named: "Delta"))
|
||||||
|
|
||||||
|
let expiredDelta = AppSnapshot(name: "Delta",
|
||||||
|
bundleIdentifier: "com.rileytestut.Delta",
|
||||||
|
expirationDate: expiredExpirationDate,
|
||||||
|
refreshedDate: shortRefreshedDate,
|
||||||
|
tintColor: .deltaPrimary,
|
||||||
|
icon: UIImage(named: "Delta"))
|
||||||
|
|
||||||
return Group {
|
return Group {
|
||||||
WidgetView(entry: AppEntry(date: Date(), app: altstore))
|
WidgetView(entry: AppEntry(date: Date(), app: altstore))
|
||||||
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
||||||
@@ -171,6 +180,9 @@ struct WidgetView_Previews: PreviewProvider {
|
|||||||
WidgetView(entry: AppEntry(date: Date(), app: delta))
|
WidgetView(entry: AppEntry(date: Date(), app: delta))
|
||||||
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
||||||
|
|
||||||
|
WidgetView(entry: AppEntry(date: Date(), app: expiredDelta))
|
||||||
|
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
||||||
|
|
||||||
WidgetView(entry: AppEntry(date: Date(), app: nil))
|
WidgetView(entry: AppEntry(date: Date(), app: nil))
|
||||||
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
.previewContext(WidgetPreviewContext(family: .systemSmall))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user