diff --git a/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift b/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift
index 84049e0079..710a4ed4fa 100644
--- a/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift
+++ b/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift
@@ -12,7 +12,7 @@ struct BadgesPurchaseStateView: View {
@EnvironmentObject var theme: AppTheme
@Environment(\.dismiss) private var dismiss
let title: LocalizedStringKey
- let message: LocalizedStringKey
+ var message: LocalizedStringKey? = nil
var showsAsSheet: Bool = false
var body: some View {
@@ -38,10 +38,12 @@ struct BadgesPurchaseStateView: View {
.multilineTextAlignment(.center)
.fixedSize(horizontal: false, vertical: true)
- Text(message)
- .font(.body)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
+ if let message {
+ Text(message)
+ .font(.body)
+ .multilineTextAlignment(.center)
+ .fixedSize(horizontal: false, vertical: true)
+ }
Spacer()
diff --git a/apps/ios/Shared/Views/Badges/BadgesView.swift b/apps/ios/Shared/Views/Badges/BadgesView.swift
index 07760a5284..4de8383094 100644
--- a/apps/ios/Shared/Views/Badges/BadgesView.swift
+++ b/apps/ios/Shared/Views/Badges/BadgesView.swift
@@ -31,7 +31,7 @@ struct BadgesView: View {
BadgesPurchaseStateView(title: purchaseState.title, message: purchaseState.message, showsAsSheet: showsAsSheet)
.transition(.opacity)
} else if store.checkingPurchases {
- BadgesPurchaseStateView(title: "Checking your purchases", message: "Purchases not yet delivered are checked first.", showsAsSheet: showsAsSheet)
+ BadgesPurchaseStateView(title: "Checking your purchases", showsAsSheet: showsAsSheet)
.transition(.opacity)
} else {
BadgesSupportSimplexView(showsAsSheet: showsAsSheet)
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt
index 0c6425a4a0..bb9260f9d9 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt
@@ -16,7 +16,7 @@ import chat.simplex.common.views.onboarding.TextButtonBelowOnboardingButton
import chat.simplex.res.MR
@Composable
-fun BadgesPurchaseStateView(title: StringResource, message: StringResource, onDismiss: () -> Unit) {
+fun BadgesPurchaseStateView(title: StringResource, message: StringResource?, onDismiss: () -> Unit) {
ColumnWithScrollBar(
Modifier.background(MaterialTheme.colors.background).padding(horizontal = 25.dp).padding(top = 8.dp, bottom = 20.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
@@ -32,12 +32,14 @@ fun BadgesPurchaseStateView(title: StringResource, message: StringResource, onDi
modifier = Modifier.fillMaxWidth()
)
- Text(
- stringResource(message),
- style = MaterialTheme.typography.body1,
- textAlign = TextAlign.Center,
- modifier = Modifier.fillMaxWidth()
- )
+ if (message != null) {
+ Text(
+ stringResource(message),
+ style = MaterialTheme.typography.body1,
+ textAlign = TextAlign.Center,
+ modifier = Modifier.fillMaxWidth()
+ )
+ }
Spacer(Modifier.weight(1f))
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt
index b48e120eca..e4f21df803 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt
@@ -30,7 +30,7 @@ fun BadgesView(modalManager: ModalManager, close: () -> Unit) {
// holds the purchase screens' slot, so a consumable cannot be bought twice
BadgesPurchaseStateView(purchaseState.title, purchaseState.message, onDismiss = close)
} else if (checkingPurchases) {
- BadgesPurchaseStateView(MR.strings.badges_checking_purchases_title, MR.strings.badges_checking_purchases_body, onDismiss = close)
+ BadgesPurchaseStateView(MR.strings.badges_checking_purchases_title, null, onDismiss = close)
} else {
BadgesSupportSimplexView(modalManager, unwindToDepth)
}
diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
index 5eb521d1c0..65ae37cc86 100644
--- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
+++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
@@ -3190,7 +3190,6 @@
Waiting for approval
Nothing has been charged.
Checking your purchases
- Purchases not yet delivered are checked first.
Store purchase
A store purchase is being processed.
Buy in browser
diff --git a/src/Simplex/Chat/Store/Badges.hs b/src/Simplex/Chat/Store/Badges.hs
index 21d990a520..769cb47d4b 100644
--- a/src/Simplex/Chat/Store/Badges.hs
+++ b/src/Simplex/Chat/Store/Badges.hs
@@ -143,8 +143,8 @@ getOpenStorePurchases db User {userId} now =
|]
(userId, receiptDueSince)
where
- -- a week outlasts an Ask to Buy request (24 hours) and a Play slow payment (days), whose waiting screen
- -- needs the record; one a receipt reached is paid for, so it is listed until its badge arrives
+ -- a record with no receipt is dropped after a week: longer than an Ask to Buy approval or a Play slow
+ -- payment can take, and those are the only waits that still need it. One a receipt reached is paid for.
receiptDueSince = addUTCTime (negate $ 7 * nominalDay) now
getBadgeStoreReceipt :: DB.Connection -> User -> StoreTransactionRef -> IO (Maybe BadgeStash)