mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Various fixes
This commit is contained in:
@@ -22,6 +22,7 @@ import ListSectionComponent
|
||||
import ListItemComponentAdaptor
|
||||
import TelegramStringFormatting
|
||||
import UndoUI
|
||||
import ChatMessagePaymentAlertController
|
||||
|
||||
private final class SheetContent: CombinedComponent {
|
||||
typealias EnvironmentType = ViewControllerComponentContainer.Environment
|
||||
@@ -410,45 +411,100 @@ public final class WebAppMessagePreviewScreen: ViewControllerComponentContainer
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
fileprivate func complete(peers: [EnginePeer]) {
|
||||
for peer in peers {
|
||||
let _ = self.context.engine.messages.enqueueOutgoingMessage(
|
||||
to: peer.id,
|
||||
replyTo: nil,
|
||||
storyId: nil,
|
||||
content: .preparedInlineMessage(self.preparedMessage)
|
||||
).start()
|
||||
}
|
||||
private func presentPaidMessageAlertIfNeeded(peers: [EnginePeer], requiresStars: [EnginePeer.Id: Int64], completion: @escaping () -> Void) {
|
||||
|
||||
let text: String
|
||||
let presentationData = self.context.sharedContext.currentPresentationData.with { $0 }
|
||||
if peers.count == 1, let peer = peers.first {
|
||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
text = presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string
|
||||
} else if peers.count == 2, let firstPeer = peers.first, let secondPeer = peers.last {
|
||||
let firstPeerName = firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
let secondPeerName = secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
text = presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string
|
||||
} else if let peer = peers.first {
|
||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
text = presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(peers.count - 1)").string
|
||||
} else {
|
||||
text = ""
|
||||
}
|
||||
|
||||
if let navigationController = self.navigationController as? NavigationController {
|
||||
Queue.mainQueue().after(1.0) {
|
||||
guard let lastController = navigationController.viewControllers.last as? ViewController else {
|
||||
}
|
||||
|
||||
fileprivate func complete(peers: [EnginePeer], controller: ViewController?) {
|
||||
let _ = (self.context.engine.data.get(
|
||||
EngineDataMap(
|
||||
peers.map { TelegramEngine.EngineData.Item.Peer.SendPaidMessageStars.init(id: $0.id) }
|
||||
)
|
||||
)
|
||||
|> deliverOnMainQueue).start(next: { [weak self] sendPaidMessageStars in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
var totalAmount: StarsAmount = .zero
|
||||
var chargingPeers: [EnginePeer] = []
|
||||
for peer in peers {
|
||||
if let maybeAmount = sendPaidMessageStars[peer.id], let amount = maybeAmount {
|
||||
totalAmount = totalAmount + amount
|
||||
chargingPeers.append(peer)
|
||||
}
|
||||
}
|
||||
|
||||
let presentationData = self.context.sharedContext.currentPresentationData.with { $0 }
|
||||
let proceed = { [weak self] in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
lastController.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: false, text: text), elevatedLayout: false, position: .top, animateInAsReplacement: true, action: { action in
|
||||
return false
|
||||
}), in: .window(.root))
|
||||
|
||||
for peer in peers {
|
||||
var starsAmount: StarsAmount?
|
||||
if let maybeAmount = sendPaidMessageStars[peer.id], let amount = maybeAmount {
|
||||
starsAmount = amount
|
||||
}
|
||||
let _ = self.context.engine.messages.enqueueOutgoingMessage(
|
||||
to: peer.id,
|
||||
replyTo: nil,
|
||||
storyId: nil,
|
||||
content: .preparedInlineMessage(self.preparedMessage),
|
||||
sendPaidMessageStars: starsAmount
|
||||
).start()
|
||||
}
|
||||
|
||||
let text: String
|
||||
if peers.count == 1, let peer = peers.first {
|
||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
text = presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string
|
||||
} else if peers.count == 2, let firstPeer = peers.first, let secondPeer = peers.last {
|
||||
let firstPeerName = firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
let secondPeerName = secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
text = presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string
|
||||
} else if let peer = peers.first {
|
||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||
text = presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(peers.count - 1)").string
|
||||
} else {
|
||||
text = ""
|
||||
}
|
||||
|
||||
if let navigationController = self.navigationController as? NavigationController {
|
||||
Queue.mainQueue().after(1.0) {
|
||||
guard let lastController = navigationController.viewControllers.last as? ViewController else {
|
||||
return
|
||||
}
|
||||
lastController.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: false, text: text), elevatedLayout: false, position: .top, animateInAsReplacement: true, action: { action in
|
||||
return false
|
||||
}), in: .window(.root))
|
||||
}
|
||||
}
|
||||
|
||||
self.completeWithResult(true)
|
||||
self.dismiss()
|
||||
controller?.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
self.completeWithResult(true)
|
||||
self.dismiss()
|
||||
|
||||
if totalAmount.value > 0 {
|
||||
let controller = chatMessagePaymentAlertController(
|
||||
context: nil,
|
||||
presentationData: presentationData,
|
||||
updatedPresentationData: nil,
|
||||
peers: chargingPeers,
|
||||
count: 1,
|
||||
amount: totalAmount,
|
||||
totalAmount: totalAmount,
|
||||
hasCheck: false,
|
||||
navigationController: self.navigationController as? NavigationController,
|
||||
completion: { _ in
|
||||
proceed()
|
||||
}
|
||||
)
|
||||
self.present(controller, in: .window(.root))
|
||||
} else {
|
||||
proceed()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private var completed = false
|
||||
@@ -468,8 +524,7 @@ public final class WebAppMessagePreviewScreen: ViewControllerComponentContainer
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.complete(peers: peers)
|
||||
controller?.dismiss()
|
||||
self.complete(peers: peers, controller: controller)
|
||||
}
|
||||
|
||||
self.push(controller)
|
||||
|
||||
Reference in New Issue
Block a user