import Foundation import TelegramPresentationData import AccountContext import Postbox import TelegramCore import SwiftSignalKit import Display import TelegramPresentationData import PresentationDataUtils import QuickReplyNameAlertController import BusinessLinkNameAlertController extension ChatControllerImpl { func editChat() { if case let .customChatContents(customChatContents) = self.subject, case let .quickReplyMessageInput(currentValue, shortcutType) = customChatContents.kind, case .generic = shortcutType { var completion: ((String?) -> Void)? let alertController = quickReplyNameAlertController( context: self.context, text: self.presentationData.strings.QuickReply_EditShortcutTitle, subtext: self.presentationData.strings.QuickReply_EditShortcutText, value: currentValue, characterLimit: 32, apply: { value in completion?(value) } ) completion = { [weak self, weak alertController] value in guard let self else { alertController?.dismissAnimated() return } if let value, !value.isEmpty { if value == currentValue { alertController?.dismissAnimated() return } let _ = (self.context.engine.accountData.shortcutMessageList(onlyRemote: false) |> take(1) |> deliverOnMainQueue).start(next: { [weak self] shortcutMessageList in guard let self else { alertController?.dismissAnimated() return } if shortcutMessageList.items.contains(where: { $0.shortcut.lowercased() == value.lowercased() }) { if let contentNode = alertController?.contentNode as? QuickReplyNameAlertContentNode { contentNode.setErrorText(errorText: self.presentationData.strings.QuickReply_ShortcutExistsInlineError) } } else { self.chatTitleView?.titleContent = .custom("\(value)", nil, false) alertController?.view.endEditing(true) alertController?.dismissAnimated() if case let .customChatContents(customChatContents) = self.subject { customChatContents.quickReplyUpdateShortcut(value: value) } } }) } } self.present(alertController, in: .window(.root)) } else if case let .customChatContents(customChatContents) = self.subject, case let .businessLinkSetup(link) = customChatContents.kind { let currentValue = link.title ?? "" var completion: ((String?) -> Void)? let alertController = businessLinkNameAlertController( context: self.context, text: self.presentationData.strings.Business_Links_LinkNameTitle, subtext: self.presentationData.strings.Business_Links_LinkNameText, value: currentValue, characterLimit: 32, apply: { value in completion?(value) } ) completion = { [weak self, weak alertController] value in guard let self else { alertController?.dismissAnimated() return } if let value { if value == currentValue { alertController?.dismissAnimated() return } let _ = self.context.engine.accountData.editBusinessChatLink(url: link.url, message: link.message, entities: link.entities, title: value.isEmpty ? nil : value).startStandalone() let linkUrl: String if link.url.hasPrefix("https://") { linkUrl = String(link.url[link.url.index(link.url.startIndex, offsetBy: "https://".count)...]) } else { linkUrl = link.url } self.chatTitleView?.titleContent = .custom(value.isEmpty ? self.presentationData.strings.Business_Links_EditLinkTitle : value, linkUrl, false) if case let .customChatContents(customChatContents) = self.subject { customChatContents.businessLinkUpdate(message: link.message, entities: link.entities, title: value.isEmpty ? nil : value) } alertController?.view.endEditing(true) alertController?.dismissAnimated() } } self.present(alertController, in: .window(.root)) } } }