From a3e625e0a8359a51769cbdf345aca81da831a3cf Mon Sep 17 00:00:00 2001 From: Eugene Bistolas Date: Mon, 22 Nov 2021 16:02:07 -1000 Subject: [PATCH] [Badging] Handle incomplete state from Stripe per server spec --- .../AppSettings/SubscriptionViewController.swift | 7 +++++++ .../Subscriptions/SubscriptionManager.swift | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Signal/src/ViewControllers/AppSettings/SubscriptionViewController.swift b/Signal/src/ViewControllers/AppSettings/SubscriptionViewController.swift index 7c1cc929af..35870b86c4 100644 --- a/Signal/src/ViewControllers/AppSettings/SubscriptionViewController.swift +++ b/Signal/src/ViewControllers/AppSettings/SubscriptionViewController.swift @@ -91,6 +91,13 @@ class SubscriptionViewController: OWSTableViewController2 { private var subscriptionRedemptionFailureReason: SubscriptionRedemptionFailureReason { var failureReason: SubscriptionRedemptionFailureReason = .none + + if let currentSubscription = currentSubscription { + if currentSubscription.status == .incomplete || currentSubscription.status == .incompleteExpired { + return .paymentFailed + } + } + SDSDatabaseStorage.shared.read { transaction in failureReason = SubscriptionManager.lastReceiptRedemptionFailed(transaction: transaction) } diff --git a/SignalMessaging/Subscriptions/SubscriptionManager.swift b/SignalMessaging/Subscriptions/SubscriptionManager.swift index fdee492b19..c9cf901ee0 100644 --- a/SignalMessaging/Subscriptions/SubscriptionManager.swift +++ b/SignalMessaging/Subscriptions/SubscriptionManager.swift @@ -47,6 +47,17 @@ public class SubscriptionLevel: Comparable { } public struct Subscription { + + public enum StripeSubscriptionStatus: String { + case trialing = "trialing" + case active = "active" + case incomplete = "incomplete" + case incompleteExpired = "incomplete_expired" + case pastDue = "past_due" + case cancelled = "cancelled" + case unpaid = "unpaid" + } + public let level: UInt public let currency: String public let amount: NSDecimalNumber @@ -54,6 +65,7 @@ public struct Subscription { public let billingCycleAnchor: TimeInterval public let active: Bool public let cancelAtEndOfPeriod: Bool + public let status: StripeSubscriptionStatus public init(jsonDictionary: [String: Any]) throws { let params = ParamParser(dictionary: jsonDictionary) @@ -65,7 +77,7 @@ public struct Subscription { billingCycleAnchor = try params.required(key: "billingCycleAnchor") active = try params.required(key: "active") cancelAtEndOfPeriod = try params.required(key: "cancelAtPeriodEnd") - + status = StripeSubscriptionStatus(rawValue: try params.required(key: "status"))! } }