Various fixes

This commit is contained in:
Ilya Laktyushin 2022-06-21 22:33:52 +05:00
parent 12f3b4b64a
commit 699f709f2e
4 changed files with 46 additions and 27 deletions

View File

@ -35,7 +35,7 @@ public final class InAppPurchaseManager: NSObject {
}
public enum RestoreState {
case succeed
case succeed(Bool)
case failed
}
@ -61,7 +61,7 @@ public final class InAppPurchaseManager: NSObject {
private let premiumProductId: String
private var products: [Product] = []
private var productsPromise = Promise<[Product]>()
private var productsPromise = Promise<[Product]>([])
private var productRequest: SKProductsRequest?
private let stateQueue = Queue()
@ -290,16 +290,28 @@ extension InAppPurchaseManager: SKPaymentTransactionObserver {
Queue.mainQueue().async {
if let onRestoreCompletion = self.onRestoreCompletion {
Logger.shared.log("InAppPurchaseManager", "Transactions restoration finished")
onRestoreCompletion(.succeed)
self.onRestoreCompletion = nil
if let receiptData = getReceiptData() {
self.disposableSet.set(
self.engine.payments.sendAppStoreReceipt(receipt: receiptData, restore: true).start(completed: {
self.engine.payments.sendAppStoreReceipt(receipt: receiptData, restore: true).start(error: { error in
Queue.mainQueue().async {
if case .serverProvided = error {
onRestoreCompletion(.succeed(true))
} else {
onRestoreCompletion(.succeed(false))
}
}
}, completed: {
Queue.mainQueue().async {
onRestoreCompletion(.succeed(false))
}
Logger.shared.log("InAppPurchaseManager", "Sent restored receipt")
}),
forKey: "restore"
)
} else {
onRestoreCompletion(.succeed(false))
}
}
}

View File

@ -495,24 +495,24 @@ class VoiceChatFullscreenParticipantItemNode: ItemListRevealOptionsItemNode {
let leftInset: CGFloat = 58.0 + params.leftInset
let premiumConfiguration = PremiumConfiguration.with(appConfiguration: item.context.currentAppConfiguration.with { $0 })
// let premiumConfiguration = PremiumConfiguration.with(appConfiguration: item.context.currentAppConfiguration.with { $0 })
var titleIconsWidth: CGFloat = 0.0
var currentCredibilityIconImage: UIImage?
var credibilityIconOffset: CGFloat = 0.0
if item.peer.isScam {
currentCredibilityIconImage = PresentationResourcesChatList.scamIcon(item.presentationData.theme, strings: item.presentationData.strings, type: .regular)
credibilityIconOffset = 2.0
} else if item.peer.isFake {
currentCredibilityIconImage = PresentationResourcesChatList.fakeIcon(item.presentationData.theme, strings: item.presentationData.strings, type: .regular)
credibilityIconOffset = 2.0
} else if item.peer.isVerified {
currentCredibilityIconImage = PresentationResourcesChatList.verifiedIcon(item.presentationData.theme)
credibilityIconOffset = 3.0
} else if item.peer.isPremium && !premiumConfiguration.isPremiumDisabled {
currentCredibilityIconImage = PresentationResourcesChatList.premiumIcon(item.presentationData.theme)
credibilityIconOffset = 3.0
}
let currentCredibilityIconImage: UIImage? = nil
let credibilityIconOffset: CGFloat = 0.0
// if item.peer.isScam {
// currentCredibilityIconImage = PresentationResourcesChatList.scamIcon(item.presentationData.theme, strings: item.presentationData.strings, type: .regular)
// credibilityIconOffset = 2.0
// } else if item.peer.isFake {
// currentCredibilityIconImage = PresentationResourcesChatList.fakeIcon(item.presentationData.theme, strings: item.presentationData.strings, type: .regular)
// credibilityIconOffset = 2.0
// } else if item.peer.isVerified {
// currentCredibilityIconImage = PresentationResourcesChatList.verifiedIcon(item.presentationData.theme)
// credibilityIconOffset = 3.0
// } else if item.peer.isPremium && !premiumConfiguration.isPremiumDisabled {
// currentCredibilityIconImage = PresentationResourcesChatList.premiumIcon(item.presentationData.theme)
// credibilityIconOffset = 3.0
// }
if let currentCredibilityIconImage = currentCredibilityIconImage {
titleIconsWidth += 4.0 + currentCredibilityIconImage.size.width

View File

@ -7,6 +7,7 @@ import TelegramApi
public enum AssignAppStoreTransactionError {
case generic
case timeout
case serverProvided
}
func _internal_sendAppStoreReceipt(account: Account, receipt: Data, restore: Bool) -> Signal<Never, AssignAppStoreTransactionError> {
@ -15,8 +16,12 @@ func _internal_sendAppStoreReceipt(account: Account, receipt: Data, restore: Boo
flags |= (1 << 0)
}
return account.network.request(Api.functions.payments.assignAppStoreTransaction(flags: flags, receipt: Buffer(data: receipt)))
|> mapError { _ -> AssignAppStoreTransactionError in
return .generic
|> mapError { error -> AssignAppStoreTransactionError in
if error.errorCode == 406 {
return .serverProvided
} else {
return .generic
}
}
|> mapToSignal { updates -> Signal<Never, AssignAppStoreTransactionError> in
account.stateManager.addUpdates(updates)

View File

@ -778,15 +778,17 @@ func openExternalUrlImpl(context: AccountContext, urlContext: OpenURLContext, ur
context.inAppPurchaseManager?.restorePurchases(completion: { [weak statusController] result in
statusController?.dismiss()
let text: String
let text: String?
switch result {
case .succeed:
text = presentationData.strings.Premium_Restore_Success
case let .succeed(serverProvided):
text = serverProvided ? nil : presentationData.strings.Premium_Restore_Success
case .failed:
text = presentationData.strings.Premium_Restore_ErrorUnknown
}
let alertController = textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})])
context.sharedContext.presentGlobalController(alertController, nil)
if let text = text {
let alertController = textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})])
context.sharedContext.presentGlobalController(alertController, nil)
}
})
}
}