Web app improvements

This commit is contained in:
Ilya Laktyushin 2024-06-29 01:10:21 +04:00
parent e203405b3e
commit 9146416f68
2 changed files with 34 additions and 9 deletions

View File

@ -11,6 +11,7 @@ import AccountContext
import TelegramNotices import TelegramNotices
import PresentationDataUtils import PresentationDataUtils
import UndoUI import UndoUI
import UrlHandling
public extension ChatControllerImpl { public extension ChatControllerImpl {
func openWebApp(buttonText: String, url: String, simple: Bool, source: ChatOpenWebViewSource) { func openWebApp(buttonText: String, url: String, simple: Bool, source: ChatOpenWebViewSource) {
@ -89,8 +90,13 @@ public extension ChatControllerImpl {
} }
} }
var fullSize = false
if isTelegramMeLink(url), let internalUrl = parseFullInternalUrl(sharedContext: self.context.sharedContext, url: url), case .peer(_, .appStart) = internalUrl {
fullSize = !url.contains("?mode=compact")
}
let context = self.context let context = self.context
let params = WebAppParameters(source: .menu, peerId: peerId, botId: peerId, botName: botName, url: url, queryId: nil, payload: nil, buttonText: buttonText, keepAliveSignal: nil, forceHasSettings: false, fullSize: false) let params = WebAppParameters(source: .menu, peerId: peerId, botId: peerId, botName: botName, url: url, queryId: nil, payload: nil, buttonText: buttonText, keepAliveSignal: nil, forceHasSettings: false, fullSize: fullSize)
let controller = standaloneWebAppController(context: self.context, updatedPresentationData: self.updatedPresentationData, params: params, threadId: self.chatLocation.threadId, openUrl: { [weak self] url, concealed, commit in let controller = standaloneWebAppController(context: self.context, updatedPresentationData: self.updatedPresentationData, params: params, threadId: self.chatLocation.threadId, openUrl: { [weak self] url, concealed, commit in
self?.openUrl(url, concealed: concealed, forceExternal: true, commit: commit) self?.openUrl(url, concealed: concealed, forceExternal: true, commit: commit)
}, requestSwitchInline: { [weak self] query, chatTypes, completion in }, requestSwitchInline: { [weak self] query, chatTypes, completion in

View File

@ -487,12 +487,31 @@ public final class WebAppController: ViewController, AttachmentContainable {
} }
}) })
} else { } else {
let _ = (self.context.engine.messages.requestWebView(peerId: controller.peerId, botId: controller.botId, url: controller.url, payload: controller.payload, themeParams: generateWebAppThemeParams(presentationData.theme), fromMenu: controller.source == .menu, replyToMessageId: controller.replyToMessageId, threadId: controller.threadId) if let url = controller.url, isTelegramMeLink(url), let internalUrl = parseFullInternalUrl(sharedContext: self.context.sharedContext, url: url), case .peer(_, .appStart) = internalUrl {
|> deliverOnMainQueue).start(next: { [weak self] result in let _ = (self.context.sharedContext.resolveUrl(context: self.context, peerId: controller.peerId, url: url, skipUrlAuth: false)
guard let strongSelf = self else { |> deliverOnMainQueue).startStandalone(next: { [weak self] result in
return guard let self, let controller = self.controller else {
} return
if let parsedUrl = URL(string: result.url) { }
guard case let .peer(peer, params) = result, let peer, case let .withBotApp(appStart) = params else {
controller.dismiss()
return
}
let _ = (self.context.engine.messages.requestAppWebView(peerId: peer.id, appReference: .id(id: appStart.botApp.id, accessHash: appStart.botApp.accessHash), payload: appStart.payload, themeParams: generateWebAppThemeParams(self.presentationData.theme), compact: appStart.compact, allowWrite: true)
|> deliverOnMainQueue).startStandalone(next: { [weak self] result in
guard let self, let parsedUrl = URL(string: result.url) else {
return
}
self.controller?.titleView?.title = CounterControllerTitle(title: appStart.botApp.title, counter: self.presentationData.strings.Bot_GenericBotStatus)
self.webView?.load(URLRequest(url: parsedUrl))
})
})
} else {
let _ = (self.context.engine.messages.requestWebView(peerId: controller.peerId, botId: controller.botId, url: controller.url, payload: controller.payload, themeParams: generateWebAppThemeParams(presentationData.theme), fromMenu: controller.source == .menu, replyToMessageId: controller.replyToMessageId, threadId: controller.threadId)
|> deliverOnMainQueue).start(next: { [weak self] result in
guard let strongSelf = self, let parsedUrl = URL(string: result.url) else {
return
}
strongSelf.queryId = result.queryId strongSelf.queryId = result.queryId
strongSelf.webView?.load(URLRequest(url: parsedUrl)) strongSelf.webView?.load(URLRequest(url: parsedUrl))
@ -509,8 +528,8 @@ public final class WebAppController: ViewController, AttachmentContainable {
} }
}) })
} }
} })
}) }
} }
} }
} }