mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Various improvements
This commit is contained in:
@@ -138,6 +138,8 @@ import QuickShareScreen
|
||||
import PostSuggestionsSettingsScreen
|
||||
import PromptUI
|
||||
import SuggestedPostApproveAlert
|
||||
import AVFoundation
|
||||
import BalanceNeededScreen
|
||||
|
||||
public final class ChatControllerOverlayPresentationData {
|
||||
public let expandData: (ASDisplayNode?, () -> Void)
|
||||
@@ -2365,70 +2367,130 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
})
|
||||
strongSelf.present(promptController, in: .window(.root))
|
||||
case 1:
|
||||
var timestamp: Int32?
|
||||
var funds: (amount: CurrencyAmount, commissionPermille: Int)?
|
||||
if let amount = attribute.amount {
|
||||
let configuration = StarsSubscriptionConfiguration.with(appConfiguration: strongSelf.context.currentAppConfiguration.with { $0 })
|
||||
funds = (amount, amount.currency == .stars ? Int(configuration.channelMessageSuggestionStarsCommissionPermille) : Int(configuration.channelMessageSuggestionTonCommissionPermille))
|
||||
}
|
||||
|
||||
var isAdmin = false
|
||||
if let channel = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel, channel.isMonoForum, let linkedMonoforumId = channel.linkedMonoforumId, let mainChannel = strongSelf.presentationInterfaceState.renderedPeer?.peers[linkedMonoforumId] as? TelegramChannel, mainChannel.hasPermission(.manageDirect) {
|
||||
isAdmin = true
|
||||
}
|
||||
|
||||
if attribute.timestamp == nil {
|
||||
let controller = ChatScheduleTimeController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, mode: .suggestPost(needsTime: true, isAdmin: isAdmin, funds: funds), style: .default, currentTime: nil, minimalTime: nil, dismissByTapOutside: true, completion: { [weak strongSelf] time in
|
||||
guard let strongSelf else {
|
||||
return
|
||||
}
|
||||
progress?.set(.single(true))
|
||||
let _ = strongSelf.context.engine.messages.monoforumPerformSuggestedPostAction(id: message.id, action: .approve(timestamp: time != 0 ? time : nil)).startStandalone(completed: {
|
||||
progress?.set(.single(false))
|
||||
})
|
||||
})
|
||||
strongSelf.view.endEditing(true)
|
||||
strongSelf.present(controller, in: .window(.root))
|
||||
|
||||
timestamp = Int32(Date().timeIntervalSince1970) + 1 * 60 * 60
|
||||
} else {
|
||||
var textString: String
|
||||
if isAdmin {
|
||||
textString = strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_AdminConfirmationText(message.author.flatMap(EnginePeer.init)?.compactDisplayTitle ?? "").string
|
||||
|
||||
if let funds {
|
||||
var commissionValue: String
|
||||
commissionValue = "\(Double(funds.commissionPermille) * 0.1)"
|
||||
if commissionValue.hasSuffix(".0") {
|
||||
commissionValue = String(commissionValue[commissionValue.startIndex ..< commissionValue.index(commissionValue.endIndex, offsetBy: -2)])
|
||||
} else if commissionValue.hasSuffix(".00") {
|
||||
commissionValue = String(commissionValue[commissionValue.startIndex ..< commissionValue.index(commissionValue.endIndex, offsetBy: -3)])
|
||||
}
|
||||
|
||||
textString += "\n\n"
|
||||
|
||||
switch funds.amount.currency {
|
||||
case .stars:
|
||||
let displayAmount = funds.amount.amount.totalValue * Double(funds.commissionPermille) / 1000.0
|
||||
textString += strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_AdminConfirmationPriceStars("\(displayAmount)", "\(commissionValue)").string
|
||||
case .ton:
|
||||
let displayAmount = Double(funds.amount.amount.value) / 1000000000.0 * Double(funds.commissionPermille) / 1000.0
|
||||
textString += strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_AdminConfirmationPriceTon("\(displayAmount)", "\(commissionValue)").string
|
||||
}
|
||||
}
|
||||
} else {
|
||||
textString = strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_UserConfirmationText
|
||||
Task { @MainActor [weak strongSelf] in
|
||||
guard let strongSelf else {
|
||||
return
|
||||
}
|
||||
|
||||
strongSelf.present(SuggestedPostApproveAlert(presentationData: strongSelf.presentationData, title: strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_Title, text: textString, actions: [
|
||||
TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_Action, action: { [weak strongSelf] in
|
||||
var timestamp: Int32?
|
||||
var funds: (amount: CurrencyAmount, commissionPermille: Int)?
|
||||
if let amount = attribute.amount {
|
||||
let configuration = StarsSubscriptionConfiguration.with(appConfiguration: strongSelf.context.currentAppConfiguration.with { $0 })
|
||||
funds = (amount, amount.currency == .stars ? Int(configuration.channelMessageSuggestionStarsCommissionPermille) : Int(configuration.channelMessageSuggestionTonCommissionPermille))
|
||||
}
|
||||
|
||||
var isAdmin = false
|
||||
if let channel = strongSelf.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel, channel.isMonoForum, let linkedMonoforumId = channel.linkedMonoforumId, let mainChannel = strongSelf.presentationInterfaceState.renderedPeer?.peers[linkedMonoforumId] as? TelegramChannel, mainChannel.hasPermission(.manageDirect) {
|
||||
isAdmin = true
|
||||
}
|
||||
|
||||
if !isAdmin, let funds {
|
||||
switch funds.amount.currency {
|
||||
case .stars:
|
||||
var balance: StarsAmount?
|
||||
if let starsContext = strongSelf.context.starsContext {
|
||||
let state = await (starsContext.state |> take(1) |> deliverOnMainQueue).get()
|
||||
balance = state?.balance
|
||||
}
|
||||
|
||||
if let balance, funds.amount.amount > balance {
|
||||
guard let starsContext = strongSelf.context.starsContext else {
|
||||
return
|
||||
}
|
||||
let _ = (strongSelf.context.engine.payments.starsTopUpOptions()
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).startStandalone(next: { [weak strongSelf] options in
|
||||
guard let strongSelf else {
|
||||
return
|
||||
}
|
||||
let purchaseController = strongSelf.context.sharedContext.makeStarsPurchaseScreen(context: strongSelf.context, starsContext: starsContext, options: options, purpose: .generic, completion: { _ in
|
||||
})
|
||||
strongSelf.push(purchaseController)
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
case .ton:
|
||||
var balance: StarsAmount?
|
||||
if let tonContext = strongSelf.context.tonContext {
|
||||
let state = await (tonContext.state |> take(1) |> deliverOnMainQueue).get()
|
||||
balance = state?.balance
|
||||
}
|
||||
|
||||
if let balance, funds.amount.amount > balance {
|
||||
let needed = funds.amount.amount - balance
|
||||
var fragmentUrl = "https://fragment.com/ads/topup"
|
||||
if let data = strongSelf.context.currentAppConfiguration.with({ $0 }).data, let value = data["ton_topup_url"] as? String {
|
||||
fragmentUrl = value
|
||||
}
|
||||
strongSelf.push(BalanceNeededScreen(
|
||||
context: strongSelf.context,
|
||||
amount: needed,
|
||||
buttonAction: { [weak strongSelf] in
|
||||
guard let strongSelf else {
|
||||
return
|
||||
}
|
||||
strongSelf.context.sharedContext.applicationBindings.openUrl(fragmentUrl)
|
||||
}
|
||||
))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if attribute.timestamp == nil {
|
||||
let controller = ChatScheduleTimeController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, mode: .suggestPost(needsTime: true, isAdmin: isAdmin, funds: funds), style: .default, currentTime: nil, minimalTime: nil, dismissByTapOutside: true, completion: { [weak strongSelf] time in
|
||||
guard let strongSelf else {
|
||||
return
|
||||
}
|
||||
let _ = strongSelf.context.engine.messages.monoforumPerformSuggestedPostAction(id: message.id, action: .approve(timestamp: timestamp)).startStandalone()
|
||||
}),
|
||||
TextAlertAction(type: .genericAction, title: strongSelf.presentationData.strings.Common_Cancel, action: {})
|
||||
], actionLayout: .vertical, parseMarkdown: true, toastText: funds?.amount.currency == .stars ? strongSelf.presentationData.strings.Chat_PostSuggestion_StarsDisclaimer : nil), in: .window(.root))
|
||||
progress?.set(.single(true))
|
||||
let _ = strongSelf.context.engine.messages.monoforumPerformSuggestedPostAction(id: message.id, action: .approve(timestamp: time != 0 ? time : nil)).startStandalone(completed: {
|
||||
progress?.set(.single(false))
|
||||
})
|
||||
})
|
||||
strongSelf.view.endEditing(true)
|
||||
strongSelf.present(controller, in: .window(.root))
|
||||
|
||||
timestamp = Int32(Date().timeIntervalSince1970) + 1 * 60 * 60
|
||||
} else {
|
||||
var textString: String
|
||||
if isAdmin {
|
||||
textString = strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_AdminConfirmationText(message.author.flatMap(EnginePeer.init)?.compactDisplayTitle ?? "").string
|
||||
|
||||
if let funds {
|
||||
var commissionValue: String
|
||||
commissionValue = "\(Double(funds.commissionPermille) * 0.1)"
|
||||
if commissionValue.hasSuffix(".0") {
|
||||
commissionValue = String(commissionValue[commissionValue.startIndex ..< commissionValue.index(commissionValue.endIndex, offsetBy: -2)])
|
||||
} else if commissionValue.hasSuffix(".00") {
|
||||
commissionValue = String(commissionValue[commissionValue.startIndex ..< commissionValue.index(commissionValue.endIndex, offsetBy: -3)])
|
||||
}
|
||||
|
||||
textString += "\n\n"
|
||||
|
||||
switch funds.amount.currency {
|
||||
case .stars:
|
||||
let displayAmount = funds.amount.amount.totalValue * Double(funds.commissionPermille) / 1000.0
|
||||
textString += strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_AdminConfirmationPriceStars("\(displayAmount)", "\(commissionValue)").string
|
||||
case .ton:
|
||||
let displayAmount = Double(funds.amount.amount.value) / 1000000000.0 * Double(funds.commissionPermille) / 1000.0
|
||||
textString += strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_AdminConfirmationPriceTon("\(displayAmount)", "\(commissionValue)").string
|
||||
}
|
||||
}
|
||||
} else {
|
||||
textString = strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_UserConfirmationText
|
||||
}
|
||||
|
||||
strongSelf.present(SuggestedPostApproveAlert(presentationData: strongSelf.presentationData, title: strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_Title, text: textString, actions: [
|
||||
TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Chat_PostSuggestion_Approve_Action, action: { [weak strongSelf] in
|
||||
guard let strongSelf else {
|
||||
return
|
||||
}
|
||||
let _ = strongSelf.context.engine.messages.monoforumPerformSuggestedPostAction(id: message.id, action: .approve(timestamp: timestamp)).startStandalone()
|
||||
}),
|
||||
TextAlertAction(type: .genericAction, title: strongSelf.presentationData.strings.Common_Cancel, action: {})
|
||||
], actionLayout: .vertical, parseMarkdown: true, toastText: funds?.amount.currency == .stars ? strongSelf.presentationData.strings.Chat_PostSuggestion_StarsDisclaimer : nil), in: .window(.root))
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
strongSelf.interfaceInteraction?.openSuggestPost(message, .default)
|
||||
|
||||
Reference in New Issue
Block a user