Web app improvements

This commit is contained in:
Ilya Laktyushin 2023-09-01 14:31:51 +04:00
parent eb3da67032
commit f432842f75
6 changed files with 41 additions and 17 deletions

View File

@ -9863,6 +9863,8 @@ Sorry for the inconvenience.";
"Story.ViewList.ViewerCount_any" = "%d Viewers";
"AuthSessions.MessageApp" = "You allowed this bot to message you when you opened %@.";
"Notification.BotWriteAllowedMenu" = "You allowed this bot to message you when you added it to your attachment menu.";
"Notification.BotWriteAllowedRequest" = "You allowed this bot to message you in the app.";
"Story.Privacy.PostStoryAs" = "Post Story As";
"Story.Privacy.PostStoryAsHeader" = "POST STORY AS";
@ -9892,3 +9894,9 @@ Sorry for the inconvenience.";
"MediaPicker.Timer.Video.ViewOnceTooltip" = "Video set to view once.";
"MediaPicker.Timer.Video.TimerTooltip" = "Video will be deleted in\n%@ seconds after opening.";
"MediaPicker.Timer.Video.KeepTooltip" = "Video will be kept in chat.";
"WebApp.AllowWriteTitle" = "Allow Sending Messages?";
"WebApp.AllowWriteConfirmation" = "This will allow the bot **%@** to message you on Telegram.";
"WebApp.SharePhoneTitle" = "Share Phone Number?";
"WebApp.SharePhoneConfirmation" = "**%@** will know your phone number. This can be useful for integration with other services.";

View File

@ -53,16 +53,19 @@ func telegramMediaActionFromApiAction(_ action: Api.MessageAction) -> TelegramMe
case let .messageActionBotAllowed(flags, domain, app):
if let domain = domain {
return TelegramMediaAction(action: .botDomainAccessGranted(domain: domain))
} else if case let .botApp(_, _, _, _, appName, _, _, _, _) = app {
} else {
var appName: String?
if case let .botApp(_, _, _, _, appNameValue, _, _, _, _) = app {
appName = appNameValue
}
var type: BotSendMessageAccessGrantedType?
if (flags & (1 << 3)) != 0 {
type = .request
} else if (flags & (1 << 1)) != 0 {
if (flags & (1 << 1)) != 0 {
type = .attachMenu
}
if (flags & (1 << 3)) != 0 {
type = .request
}
return TelegramMediaAction(action: .botAppAccessGranted(appName: appName, type: type))
} else {
return nil
}
case .messageActionSecureValuesSentMe:
return nil

View File

@ -91,7 +91,7 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
case paymentSent(currency: String, totalAmount: Int64, invoiceSlug: String?, isRecurringInit: Bool, isRecurringUsed: Bool)
case customText(text: String, entities: [MessageTextEntity])
case botDomainAccessGranted(domain: String)
case botAppAccessGranted(appName: String, type: BotSendMessageAccessGrantedType?)
case botAppAccessGranted(appName: String?, type: BotSendMessageAccessGrantedType?)
case botSentSecureValues(types: [SentSecureValueType])
case peerJoined
case phoneNumberRequest
@ -202,7 +202,7 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
self = .unknown
}
case 35:
self = .botAppAccessGranted(appName: decoder.decodeStringForKey("app", orElse: ""), type: decoder.decodeOptionalInt32ForKey("atp").flatMap { BotSendMessageAccessGrantedType(rawValue: $0) })
self = .botAppAccessGranted(appName: decoder.decodeOptionalStringForKey("app"), type: decoder.decodeOptionalInt32ForKey("atp").flatMap { BotSendMessageAccessGrantedType(rawValue: $0) })
default:
self = .unknown
}
@ -372,7 +372,11 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
encoder.encode(TelegramWallpaperNativeCodable(wallpaper), forKey: "wallpaper")
case let .botAppAccessGranted(appName, type):
encoder.encodeInt32(35, forKey: "_rawValue")
if let appName = appName {
encoder.encodeString(appName, forKey: "app")
} else {
encoder.encodeNil(forKey: "app")
}
if let type = type {
encoder.encodeInt32(type.rawValue, forKey: "atp")
} else {

View File

@ -629,8 +629,16 @@ public func universalServiceMessageString(presentationData: (PresentationTheme,
attributedString = stringWithAppliedEntities(text, entities: entities, baseColor: primaryTextColor, linkColor: primaryTextColor, baseFont: titleFont, linkFont: titleBoldFont, boldFont: titleBoldFont, italicFont: titleFont, boldItalicFont: titleBoldFont, fixedFont: titleFont, blockQuoteFont: titleFont, underlineLinks: false, message: message._asMessage())
case let .botDomainAccessGranted(domain):
attributedString = NSAttributedString(string: strings.AuthSessions_Message(domain).string, font: titleFont, textColor: primaryTextColor)
case let .botAppAccessGranted(appName, _):
attributedString = NSAttributedString(string: strings.AuthSessions_MessageApp(appName).string, font: titleFont, textColor: primaryTextColor)
case let .botAppAccessGranted(appName, type):
let text: String
if type == .attachMenu {
text = strings.Notification_BotWriteAllowedMenu
} else if type == .request {
text = strings.Notification_BotWriteAllowedRequest
} else {
text = strings.AuthSessions_MessageApp(appName ?? "").string
}
attributedString = NSAttributedString(string: text, font: titleFont, textColor: primaryTextColor)
case let .botSentSecureValues(types):
var typesString = ""
var hasIdentity = false

View File

@ -13213,7 +13213,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
let buttons: Signal<([AttachmentButtonType], [AttachmentButtonType], AttachmentButtonType?), NoError>
if !isScheduledMessages {
if !isScheduledMessages && !peer.isDeleted {
buttons = self.context.engine.messages.attachMenuBots()
|> map { attachMenuBots in
var buttons = availableButtons

View File

@ -1104,7 +1104,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
if result {
sendEvent(true)
} else {
controller.present(textAlertController(context: self.context, updatedPresentationData: controller.updatedPresentationData, title: "Allow Sending Messages?", text: "Allow \(controller.botName) to send messages?", actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: {
controller.present(textAlertController(context: self.context, updatedPresentationData: controller.updatedPresentationData, title: self.presentationData.strings.WebApp_AllowWriteTitle, text: self.presentationData.strings.WebApp_AllowWriteConfirmation(controller.botName).string, actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: {
sendEvent(false)
}), TextAlertAction(type: .defaultAction, title: self.presentationData.strings.Common_OK, action: { [weak self] in
guard let self else {
@ -1115,16 +1115,17 @@ public final class WebAppController: ViewController, AttachmentContainable {
|> deliverOnMainQueue).start(completed: {
sendEvent(true)
})
})]), in: .window(.root))
})], parseMarkdown: true), in: .window(.root))
}
})
}
fileprivate func shareAccountContact() {
guard let controller = self.controller, let botId = self.controller?.botId else {
guard let controller = self.controller, let botId = self.controller?.botId, let botName = self.controller?.botName else {
return
}
let sendEvent: (Bool) -> Void = { success in
var paramsString: String
if success {
@ -1149,7 +1150,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
requiresUnblock = true
}
let alertController = textAlertController(context: self.context, updatedPresentationData: controller.updatedPresentationData, title: self.presentationData.strings.Conversation_ShareBotContactConfirmationTitle, text: self.presentationData.strings.Conversation_ShareBotContactConfirmation, actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: {
let alertController = textAlertController(context: self.context, updatedPresentationData: controller.updatedPresentationData, title: self.presentationData.strings.WebApp_SharePhoneTitle, text: self.presentationData.strings.WebApp_SharePhoneConfirmation(botName).string, actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: {
sendEvent(false)
}), TextAlertAction(type: .defaultAction, title: self.presentationData.strings.Common_OK, action: { [weak self] in
guard let self, case let .user(user) = accountPeer, let phone = user.phone, !phone.isEmpty else {
@ -1190,7 +1191,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
} else {
sendMessage()
}
})])
})], parseMarkdown: true)
alertController.dismissed = { byOutsideTap in
if byOutsideTap {
sendEvent(false)