Various fixes

This commit is contained in:
Ilya Laktyushin 2022-04-17 15:01:36 +04:00
parent 69fda4b94e
commit ff2dad403c
2 changed files with 19 additions and 11 deletions

View File

@ -3368,7 +3368,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
return true return true
} }
let params = WebAppParameters(peerId: peerId, botId: peerId, botName: botName, url: url, queryId: nil, payload: nil, buttonText: buttonText, keepAliveSignal: nil, fromMenu: true) let params = WebAppParameters(peerId: peerId, botId: peerId, botName: botName, url: url, queryId: nil, payload: nil, buttonText: buttonText, keepAliveSignal: nil, fromMenu: true, isSimple: false)
let controller = standaloneWebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, openUrl: { [weak self] url in let controller = standaloneWebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, openUrl: { [weak self] url in
self?.openUrl(url, concealed: true, forceExternal: true) self?.openUrl(url, concealed: true, forceExternal: true)
}, getInputContainerNode: { [weak self] in }, getInputContainerNode: { [weak self] in
@ -3405,7 +3405,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
guard let strongSelf = self else { guard let strongSelf = self else {
return return
} }
let params = WebAppParameters(peerId: peerId, botId: peerId, botName: botName, url: url, queryId: nil, payload: nil, buttonText: buttonText, keepAliveSignal: nil, fromMenu: false) let params = WebAppParameters(peerId: peerId, botId: peerId, botName: botName, url: url, queryId: nil, payload: nil, buttonText: buttonText, keepAliveSignal: nil, fromMenu: false, isSimple: true)
let controller = standaloneWebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, openUrl: { [weak self] url in let controller = standaloneWebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, openUrl: { [weak self] url in
self?.openUrl(url, concealed: true, forceExternal: true) self?.openUrl(url, concealed: true, forceExternal: true)
}) })
@ -3426,7 +3426,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
guard let strongSelf = self else { guard let strongSelf = self else {
return return
} }
let params = WebAppParameters(peerId: peerId, botId: peerId, botName: botName, url: result.url, queryId: result.queryId, payload: nil, buttonText: buttonText, keepAliveSignal: result.keepAliveSignal, fromMenu: false) let params = WebAppParameters(peerId: peerId, botId: peerId, botName: botName, url: result.url, queryId: result.queryId, payload: nil, buttonText: buttonText, keepAliveSignal: result.keepAliveSignal, fromMenu: false, isSimple: false)
let controller = standaloneWebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, openUrl: { [weak self] url in let controller = standaloneWebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, openUrl: { [weak self] url in
self?.openUrl(url, concealed: true, forceExternal: true) self?.openUrl(url, concealed: true, forceExternal: true)
}, completion: { [weak self] in }, completion: { [weak self] in
@ -10995,7 +10995,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
completion(controller, nil) completion(controller, nil)
strongSelf.controllerNavigationDisposable.set(nil) strongSelf.controllerNavigationDisposable.set(nil)
case let .app(bot, botName, _): case let .app(bot, botName, _):
let params = WebAppParameters(peerId: peer.id, botId: bot.id, botName: botName, url: nil, queryId: nil, payload: botPayload, buttonText: nil, keepAliveSignal: nil, fromMenu: false) let params = WebAppParameters(peerId: peer.id, botId: bot.id, botName: botName, url: nil, queryId: nil, payload: botPayload, buttonText: nil, keepAliveSignal: nil, fromMenu: false, isSimple: false)
let replyMessageId = strongSelf.presentationInterfaceState.interfaceState.replyMessageId let replyMessageId = strongSelf.presentationInterfaceState.interfaceState.replyMessageId
let controller = WebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, replyToMessageId: replyMessageId) let controller = WebAppController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, params: params, replyToMessageId: replyMessageId)
controller.openUrl = { [weak self] url in controller.openUrl = { [weak self] url in

View File

@ -30,6 +30,7 @@ public struct WebAppParameters {
let buttonText: String? let buttonText: String?
let keepAliveSignal: Signal<Never, KeepWebViewError>? let keepAliveSignal: Signal<Never, KeepWebViewError>?
let fromMenu: Bool let fromMenu: Bool
let isSimple: Bool
public init( public init(
peerId: PeerId, peerId: PeerId,
@ -40,7 +41,8 @@ public struct WebAppParameters {
payload: String?, payload: String?,
buttonText: String?, buttonText: String?,
keepAliveSignal: Signal<Never, KeepWebViewError>?, keepAliveSignal: Signal<Never, KeepWebViewError>?,
fromMenu: Bool fromMenu: Bool,
isSimple: Bool
) { ) {
self.peerId = peerId self.peerId = peerId
self.botId = botId self.botId = botId
@ -51,6 +53,7 @@ public struct WebAppParameters {
self.buttonText = buttonText self.buttonText = buttonText
self.keepAliveSignal = keepAliveSignal self.keepAliveSignal = keepAliveSignal
self.fromMenu = fromMenu self.fromMenu = fromMenu
self.isSimple = isSimple
} }
} }
@ -96,6 +99,11 @@ public final class WebAppController: ViewController, AttachmentContainable {
private var iconDisposable: Disposable? private var iconDisposable: Disposable?
private var keepAliveDisposable: Disposable? private var keepAliveDisposable: Disposable?
private var didTransitionIn = false
private var dismissed = false
private var validLayout: (ContainerViewLayout, CGFloat)?
init(context: AccountContext, controller: WebAppController, present: @escaping (ViewController, Any?) -> Void) { init(context: AccountContext, controller: WebAppController, present: @escaping (ViewController, Any?) -> Void) {
self.context = context self.context = context
self.controller = controller self.controller = controller
@ -306,8 +314,6 @@ public final class WebAppController: ViewController, AttachmentContainable {
return nil return nil
} }
var didTransitionIn = false
private func animateTransitionIn() { private func animateTransitionIn() {
guard !self.didTransitionIn, let webView = self.webView else { guard !self.didTransitionIn, let webView = self.webView else {
return return
@ -355,7 +361,6 @@ public final class WebAppController: ViewController, AttachmentContainable {
} }
} }
private var validLayout: (ContainerViewLayout, CGFloat)?
func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
let previousLayout = self.validLayout?.0 let previousLayout = self.validLayout?.0
self.validLayout = (layout, navigationBarHeight) self.validLayout = (layout, navigationBarHeight)
@ -420,10 +425,12 @@ public final class WebAppController: ViewController, AttachmentContainable {
private var delayedScriptMessage: WKScriptMessage? private var delayedScriptMessage: WKScriptMessage?
private func handleScriptMessage(_ message: WKScriptMessage) { private func handleScriptMessage(_ message: WKScriptMessage) {
guard let controller = self.controller else {
return
}
guard let body = message.body as? [String: Any] else { guard let body = message.body as? [String: Any] else {
return return
} }
guard let eventName = body["eventName"] as? String else { guard let eventName = body["eventName"] as? String else {
return return
} }
@ -432,7 +439,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
case "web_app_ready": case "web_app_ready":
self.animateTransitionIn() self.animateTransitionIn()
case "web_app_data_send": case "web_app_data_send":
if let eventData = body["eventData"] as? String { if controller.isSimple, let eventData = body["eventData"] as? String {
self.handleSendData(data: eventData) self.handleSendData(data: eventData)
} }
case "web_app_setup_main_button": case "web_app_setup_main_button":
@ -471,7 +478,6 @@ public final class WebAppController: ViewController, AttachmentContainable {
} }
} }
private var dismissed = false
private func handleSendData(data string: String) { private func handleSendData(data string: String) {
guard let controller = self.controller, let buttonText = controller.buttonText, !self.dismissed else { guard let controller = self.controller, let buttonText = controller.buttonText, !self.dismissed else {
return return
@ -536,6 +542,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
private let payload: String? private let payload: String?
private let buttonText: String? private let buttonText: String?
private let fromMenu: Bool private let fromMenu: Bool
private let isSimple: Bool
private let keepAliveSignal: Signal<Never, KeepWebViewError>? private let keepAliveSignal: Signal<Never, KeepWebViewError>?
private let replyToMessageId: MessageId? private let replyToMessageId: MessageId?
@ -556,6 +563,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
self.payload = params.payload self.payload = params.payload
self.buttonText = params.buttonText self.buttonText = params.buttonText
self.fromMenu = params.fromMenu self.fromMenu = params.fromMenu
self.isSimple = params.isSimple
self.keepAliveSignal = params.keepAliveSignal self.keepAliveSignal = params.keepAliveSignal
self.replyToMessageId = replyToMessageId self.replyToMessageId = replyToMessageId