mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 13:35:19 +00:00
Ads and codes improvements
This commit is contained in:
parent
c474162cff
commit
987befccc4
@ -147,7 +147,7 @@ public final class BrowserBookmarksScreen: ViewController {
|
||||
}, openLargeEmojiInfo: { _, _, _ in
|
||||
}, openJoinLink: { _ in
|
||||
}, openWebView: { _, _, _, _ in
|
||||
}, activateAdAction: { _, _ in
|
||||
}, activateAdAction: { _, _, _, _ in
|
||||
}, openRequestedPeerSelection: { _, _, _, _ in
|
||||
}, saveMediaToFiles: { _ in
|
||||
}, openNoAdsDemo: {
|
||||
@ -167,6 +167,7 @@ public final class BrowserBookmarksScreen: ViewController {
|
||||
}, navigateToStory: { _, _ in
|
||||
}, attemptedNavigationToPrivateQuote: { _ in
|
||||
}, forceUpdateWarpContents: {
|
||||
}, playShakeAnimation: {
|
||||
}, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(), presentationContext: ChatPresentationContext(context: context, backgroundNode: nil))
|
||||
|
||||
|
||||
|
@ -177,7 +177,7 @@ private enum ChatListRecentEntry: Comparable, Identifiable {
|
||||
}
|
||||
|
||||
let status: ContactsPeerItemStatus
|
||||
if primaryPeer.id.isReplies {
|
||||
if primaryPeer.id.isRepliesOrVerificationCodes {
|
||||
status = .none
|
||||
} else if case let .user(user) = primaryPeer {
|
||||
let servicePeer = isServicePeer(primaryPeer._asPeer())
|
||||
|
@ -2548,7 +2548,7 @@ public class ChatListItemNode: ItemListRevealOptionsItemNode {
|
||||
if !ignoreForwardedIcon {
|
||||
if case .savedMessagesChats = item.chatListLocation {
|
||||
displayForwardedIcon = false
|
||||
} else if let forwardInfo = message.forwardInfo, !forwardInfo.flags.contains(.isImported) {
|
||||
} else if let forwardInfo = message.forwardInfo, !forwardInfo.flags.contains(.isImported) && !message.id.peerId.isVerificationCodes {
|
||||
displayForwardedIcon = true
|
||||
} else if let _ = message.attributes.first(where: { $0 is ReplyStoryAttribute }) {
|
||||
displayStoryReplyIcon = true
|
||||
|
@ -2298,7 +2298,7 @@ public final class ChatListNode: ListView {
|
||||
guard !filter.contains(.onlyPrivateChats) || peer.peerId.namespace == Namespaces.Peer.CloudUser else { return false }
|
||||
|
||||
if let peer = peer.peer {
|
||||
if peer.id.isReplies {
|
||||
if peer.id.isRepliesOrVerificationCodes {
|
||||
return false
|
||||
}
|
||||
|
||||
@ -4249,7 +4249,7 @@ private func statusStringForPeerType(accountPeerId: EnginePeer.Id, strings: Pres
|
||||
}
|
||||
}
|
||||
|
||||
if peer.id.isReplies {
|
||||
if peer.id.isReplies || peer.id.isVerificationCodes {
|
||||
return nil
|
||||
} else if case let .user(user) = peer {
|
||||
if user.botInfo != nil || user.flags.contains(.isSupport) {
|
||||
|
@ -860,8 +860,11 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
||||
}
|
||||
|
||||
self.overlayContentNode.action = { [weak self] toLandscape in
|
||||
self?.updateControlsVisibility(!toLandscape)
|
||||
self?.updateOrientation(toLandscape ? .landscapeRight : .portrait)
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.updateControlsVisibility(!toLandscape)
|
||||
self.updateOrientation(toLandscape ? .landscapeRight : .portrait)
|
||||
}
|
||||
|
||||
self.statusButtonNode.addSubnode(self.statusNode)
|
||||
@ -874,7 +877,6 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
||||
if !strongSelf.isPaused {
|
||||
strongSelf.didPause = true
|
||||
}
|
||||
|
||||
strongSelf.videoNode?.togglePlayPause()
|
||||
}
|
||||
}
|
||||
@ -1006,6 +1008,14 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
||||
}
|
||||
|
||||
|
||||
override func contentTapAction() -> Bool {
|
||||
if case let .message(message, _) = self.item?.contentInfo, let _ = message.adAttribute {
|
||||
self.item?.performAction(.ad(message.id))
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override func screenFrameUpdated(_ frame: CGRect) {
|
||||
let center = frame.midX - self.frame.width / 2.0
|
||||
self.subnodeTransform = CATransform3DMakeTranslation(-center * 0.16, 0.0, 0.0)
|
||||
@ -1249,7 +1259,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
||||
}
|
||||
}
|
||||
let status = messageMediaFileStatus(context: item.context, messageId: message.id, file: file)
|
||||
if !isWebpage {
|
||||
if !isWebpage && message.adAttribute == nil {
|
||||
scrubberView.setFetchStatusSignal(status, strings: self.presentationData.strings, decimalSeparator: self.presentationData.dateTimeFormat.decimalSeparator, fileSize: file.size)
|
||||
}
|
||||
|
||||
|
@ -59,12 +59,19 @@ open class ZoomableContentGalleryItemNode: GalleryItemNode, ASScrollViewDelegate
|
||||
self.addSubnode(self.scrollNode)
|
||||
}
|
||||
|
||||
open func contentTapAction() -> Bool {
|
||||
return false
|
||||
}
|
||||
|
||||
@objc open func contentTap(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) {
|
||||
if recognizer.state == .ended {
|
||||
if let (gesture, location) = recognizer.lastRecognizedGestureAndLocation {
|
||||
let pointInNode = self.scrollNode.view.convert(location, to: self.view)
|
||||
if pointInNode.x < 44.0 || pointInNode.x > self.frame.width - 44.0 {
|
||||
} else {
|
||||
if self.contentTapAction() {
|
||||
return
|
||||
}
|
||||
switch gesture {
|
||||
case .tap:
|
||||
self.toggleControlsVisibility()
|
||||
|
@ -445,7 +445,7 @@ public class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNo
|
||||
} else if peer.flags.contains(.isSupport), !servicePeer {
|
||||
statusText = item.presentationData.strings.Bot_GenericSupportStatus
|
||||
statusColor = item.presentationData.theme.list.itemSecondaryTextColor
|
||||
} else if peer.id.isReplies {
|
||||
} else if peer.id.isRepliesOrVerificationCodes {
|
||||
statusText = ""
|
||||
statusColor = item.presentationData.theme.list.itemPrimaryTextColor
|
||||
} else if let _ = peer.botInfo {
|
||||
|
@ -520,6 +520,9 @@ public extension EnginePeer {
|
||||
if peer.id.isReplies {
|
||||
return true
|
||||
}
|
||||
if peer.id.isVerificationCodes {
|
||||
return true
|
||||
}
|
||||
return (peer.id.namespace == Namespaces.Peer.CloudUser && (peer.id.id._internalGetInt64Value() == 777000 || peer.id.id._internalGetInt64Value() == 333000))
|
||||
}
|
||||
return false
|
||||
|
@ -424,6 +424,9 @@ public func isServicePeer(_ peer: Peer) -> Bool {
|
||||
if peer.id.isReplies {
|
||||
return true
|
||||
}
|
||||
if peer.id.isVerificationCodes {
|
||||
return true
|
||||
}
|
||||
return (peer.id.namespace == Namespaces.Peer.CloudUser && (peer.id.id._internalGetInt64Value() == 777000 || peer.id.id._internalGetInt64Value() == 333000))
|
||||
}
|
||||
return false
|
||||
@ -439,11 +442,26 @@ public extension PeerId {
|
||||
return false
|
||||
}
|
||||
|
||||
var isVerificationCodes: Bool {
|
||||
if self.namespace == Namespaces.Peer.CloudUser {
|
||||
if self.id._internalGetInt64Value() == 489000 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
var isRepliesOrVerificationCodes: Bool {
|
||||
return self.isReplies || self.isVerificationCodes
|
||||
}
|
||||
|
||||
func isRepliesOrSavedMessages(accountPeerId: PeerId) -> Bool {
|
||||
if accountPeerId == self {
|
||||
return true
|
||||
} else if self.isReplies {
|
||||
return true
|
||||
} else if self.isVerificationCodes {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
|
@ -1641,7 +1641,7 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
|
||||
if let _ = sourceReference {
|
||||
needsShareButton = true
|
||||
}
|
||||
} else if item.message.id.peerId.isReplies {
|
||||
} else if item.message.id.peerId.isRepliesOrVerificationCodes {
|
||||
needsShareButton = false
|
||||
} else if incoming {
|
||||
if let _ = sourceReference {
|
||||
|
@ -754,8 +754,10 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat
|
||||
if self.peerId.namespace == Namespaces.Peer.Empty, case let .message(_, _, id, _, _, _, _) = self.messageReference?.content {
|
||||
self.controllerInteraction?.displayMessageTooltip(id, self.presentationData.strings.Conversation_ForwardAuthorHiddenTooltip, false, self, self.avatarNode.frame)
|
||||
} else if let peer = self.peer {
|
||||
if let adMessageId = self.adMessageId {
|
||||
self.controllerInteraction?.activateAdAction(adMessageId, nil)
|
||||
if peer.id.isVerificationCodes {
|
||||
self.controllerInteraction?.playShakeAnimation()
|
||||
} else if let adMessageId = self.adMessageId {
|
||||
self.controllerInteraction?.activateAdAction(adMessageId, nil, false, false)
|
||||
} else {
|
||||
if let channel = peer as? TelegramChannel, case .broadcast = channel.info {
|
||||
self.controllerInteraction?.openPeer(EnginePeer(peer), .chat(textInputState: nil, subject: nil, peekData: nil), self.messageReference, .default)
|
||||
|
@ -298,6 +298,9 @@ public final class ChatMessageItemImpl: ChatMessageItem, CustomStringConvertible
|
||||
effectiveAuthor = TelegramUser(id: PeerId(namespace: Namespaces.Peer.Empty, id: PeerId.Id._internalFromInt64Value(Int64(authorSignature.persistentHashValue % 32))), accessHash: nil, firstName: authorSignature, lastName: nil, username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [], emojiStatus: nil, usernames: [], storiesHidden: nil, nameColor: nil, backgroundEmojiId: nil, profileColor: nil, profileBackgroundEmojiId: nil, subscriberCount: nil)
|
||||
}
|
||||
}
|
||||
if peerId.isVerificationCodes && effectiveAuthor == nil {
|
||||
effectiveAuthor = content.firstMessage.author
|
||||
}
|
||||
displayAuthorInfo = incoming && effectiveAuthor != nil
|
||||
} else {
|
||||
effectiveAuthor = content.firstMessage.author
|
||||
|
@ -167,7 +167,7 @@ final class ChatMessageNotificationItemNode: NotificationItemNode {
|
||||
}
|
||||
}
|
||||
var avatarPeer = peer
|
||||
if firstMessage.id.peerId.isReplies, let author = firstMessage.forwardInfo?.author {
|
||||
if firstMessage.id.peerId.isRepliesOrVerificationCodes, let author = firstMessage.forwardInfo?.author {
|
||||
avatarPeer = EnginePeer(author)
|
||||
}
|
||||
self.avatarNode.setPeer(context: item.context, theme: presentationData.theme, peer: avatarPeer, overrideImage: peer.id == item.context.account.peerId ? .savedMessagesIcon : nil, emptyColor: presentationData.theme.list.mediaPlaceholderColor)
|
||||
|
@ -118,7 +118,7 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
|
||||
self.contentNode.activateAction = { [weak self] in
|
||||
if let strongSelf = self, let item = strongSelf.item {
|
||||
if let _ = item.message.adAttribute {
|
||||
item.controllerInteraction.activateAdAction(item.message.id, strongSelf.contentNode.makeProgress())
|
||||
item.controllerInteraction.activateAdAction(item.message.id, strongSelf.contentNode.makeProgress(), false, false)
|
||||
} else {
|
||||
var webPageContent: TelegramMediaWebpageLoadedContent?
|
||||
for media in item.message.media {
|
||||
|
@ -616,7 +616,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
||||
}, openLargeEmojiInfo: { _, _, _ in
|
||||
}, openJoinLink: { _ in
|
||||
}, openWebView: { _, _, _, _ in
|
||||
}, activateAdAction: { _, _ in
|
||||
}, activateAdAction: { _, _, _, _ in
|
||||
}, openRequestedPeerSelection: { _, _, _, _ in
|
||||
}, saveMediaToFiles: { _ in
|
||||
}, openNoAdsDemo: {
|
||||
@ -637,6 +637,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
||||
}, navigateToStory: { _, _ in
|
||||
}, attemptedNavigationToPrivateQuote: { _ in
|
||||
}, forceUpdateWarpContents: {
|
||||
}, playShakeAnimation: {
|
||||
}, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings,
|
||||
pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(), presentationContext: ChatPresentationContext(context: context, backgroundNode: self.backgroundNode))
|
||||
self.controllerInteraction = controllerInteraction
|
||||
|
@ -473,7 +473,7 @@ public final class ChatSendGroupMediaMessageContextPreview: UIView, ChatSendMess
|
||||
}, openLargeEmojiInfo: { _, _, _ in
|
||||
}, openJoinLink: { _ in
|
||||
}, openWebView: { _, _, _, _ in
|
||||
}, activateAdAction: { _, _ in
|
||||
}, activateAdAction: { _, _, _, _ in
|
||||
}, openRequestedPeerSelection: { _, _, _, _ in
|
||||
}, saveMediaToFiles: { _ in
|
||||
}, openNoAdsDemo: {
|
||||
@ -493,6 +493,7 @@ public final class ChatSendGroupMediaMessageContextPreview: UIView, ChatSendMess
|
||||
}, navigateToStory: { _, _ in
|
||||
}, attemptedNavigationToPrivateQuote: { _ in
|
||||
}, forceUpdateWarpContents: {
|
||||
}, playShakeAnimation: {
|
||||
}, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings,
|
||||
pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(), presentationContext: ChatPresentationContext(context: self.context, backgroundNode: self.wallpaperBackgroundNode))
|
||||
|
||||
|
@ -252,7 +252,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
||||
public let openLargeEmojiInfo: (String, String?, TelegramMediaFile) -> Void
|
||||
public let openJoinLink: (String) -> Void
|
||||
public let openWebView: (String, String, Bool, ChatOpenWebViewSource) -> Void
|
||||
public let activateAdAction: (EngineMessage.Id, Promise<Bool>?) -> Void
|
||||
public let activateAdAction: (EngineMessage.Id, Promise<Bool>?, Bool, Bool) -> Void
|
||||
public let openRequestedPeerSelection: (EngineMessage.Id, ReplyMarkupButtonRequestPeerType, Int32, Int32) -> Void
|
||||
public let saveMediaToFiles: (EngineMessage.Id) -> Void
|
||||
public let openNoAdsDemo: () -> Void
|
||||
@ -273,6 +273,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
||||
public let navigateToStory: (Message, StoryId) -> Void
|
||||
public let attemptedNavigationToPrivateQuote: (Peer?) -> Void
|
||||
public let forceUpdateWarpContents: () -> Void
|
||||
public let playShakeAnimation: () -> Void
|
||||
|
||||
public var canPlayMedia: Bool = false
|
||||
public var hiddenMedia: [MessageId: [Media]] = [:]
|
||||
@ -382,7 +383,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
||||
openLargeEmojiInfo: @escaping (String, String?, TelegramMediaFile) -> Void,
|
||||
openJoinLink: @escaping (String) -> Void,
|
||||
openWebView: @escaping (String, String, Bool, ChatOpenWebViewSource) -> Void,
|
||||
activateAdAction: @escaping (EngineMessage.Id, Promise<Bool>?) -> Void,
|
||||
activateAdAction: @escaping (EngineMessage.Id, Promise<Bool>?, Bool, Bool) -> Void,
|
||||
openRequestedPeerSelection: @escaping (EngineMessage.Id, ReplyMarkupButtonRequestPeerType, Int32, Int32) -> Void,
|
||||
saveMediaToFiles: @escaping (EngineMessage.Id) -> Void,
|
||||
openNoAdsDemo: @escaping () -> Void,
|
||||
@ -402,6 +403,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
||||
navigateToStory: @escaping (Message, StoryId) -> Void,
|
||||
attemptedNavigationToPrivateQuote: @escaping (Peer?) -> Void,
|
||||
forceUpdateWarpContents: @escaping () -> Void,
|
||||
playShakeAnimation: @escaping () -> Void,
|
||||
automaticMediaDownloadSettings: MediaAutoDownloadSettings,
|
||||
pollActionState: ChatInterfacePollActionState,
|
||||
stickerSettings: ChatInterfaceStickerSettings,
|
||||
@ -512,6 +514,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
||||
self.navigateToStory = navigateToStory
|
||||
self.attemptedNavigationToPrivateQuote = attemptedNavigationToPrivateQuote
|
||||
self.forceUpdateWarpContents = forceUpdateWarpContents
|
||||
self.playShakeAnimation = playShakeAnimation
|
||||
|
||||
self.automaticMediaDownloadSettings = automaticMediaDownloadSettings
|
||||
|
||||
|
@ -299,7 +299,11 @@ public final class ChatTitleView: UIView, NavigationBarTitleView {
|
||||
}
|
||||
}
|
||||
}
|
||||
isEnabled = isEnabledValue
|
||||
if peerView.peerId.isVerificationCodes {
|
||||
isEnabled = false
|
||||
} else {
|
||||
isEnabled = isEnabledValue
|
||||
}
|
||||
}
|
||||
case let .replyThread(type, count):
|
||||
let textFont = titleFont
|
||||
@ -435,7 +439,7 @@ public final class ChatTitleView: UIView, NavigationBarTitleView {
|
||||
switch titleContent {
|
||||
case let .peer(peerView, _, _, isScheduledMessages, _, _, _):
|
||||
if let peer = peerView.peer {
|
||||
if peer.id == self.context.account.peerId || isScheduledMessages || peer.id.isReplies {
|
||||
if peer.id == self.context.account.peerId || isScheduledMessages || peer.id.isRepliesOrVerificationCodes {
|
||||
inputActivitiesAllowed = false
|
||||
}
|
||||
}
|
||||
@ -540,7 +544,7 @@ public final class ChatTitleView: UIView, NavigationBarTitleView {
|
||||
state = .info(string, .generic)
|
||||
} else if let peer = peerView.peer {
|
||||
let servicePeer = isServicePeer(peer)
|
||||
if peer.id == self.context.account.peerId || isScheduledMessages || peer.id.isReplies {
|
||||
if peer.id == self.context.account.peerId || isScheduledMessages || peer.id.isRepliesOrVerificationCodes {
|
||||
let string = NSAttributedString(string: "", font: subtitleFont, textColor: titleTheme.rootController.navigationBar.secondaryTextColor)
|
||||
state = .info(string, .generic)
|
||||
} else if let user = peer as? TelegramUser {
|
||||
|
@ -3472,7 +3472,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
|
||||
}, openLargeEmojiInfo: { _, _, _ in
|
||||
}, openJoinLink: { _ in
|
||||
}, openWebView: { _, _, _, _ in
|
||||
}, activateAdAction: { _, _ in
|
||||
}, activateAdAction: { _, _, _, _ in
|
||||
}, openRequestedPeerSelection: { _, _, _, _ in
|
||||
}, saveMediaToFiles: { _ in
|
||||
}, openNoAdsDemo: {
|
||||
@ -3492,6 +3492,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
|
||||
}, navigateToStory: { _, _ in
|
||||
}, attemptedNavigationToPrivateQuote: { _ in
|
||||
}, forceUpdateWarpContents: {
|
||||
}, playShakeAnimation: {
|
||||
}, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings,
|
||||
pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(), presentationContext: ChatPresentationContext(context: context, backgroundNode: nil))
|
||||
self.hiddenMediaDisposable = context.sharedContext.mediaManager.galleryHiddenMediaManager.hiddenIds().startStrict(next: { [weak self] ids in
|
||||
|
@ -1280,6 +1280,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
standalone = true
|
||||
}
|
||||
|
||||
if let adAttribute = message.attributes.first(where: { $0 is AdMessageAttribute }) as? AdMessageAttribute {
|
||||
if let file = message.media.first(where: { $0 is TelegramMediaFile}) as? TelegramMediaFile, file.isVideo && !file.isAnimated {
|
||||
strongSelf.chatDisplayNode.historyNode.adMessagesContext?.markAction(opaqueId: adAttribute.opaqueId, media: true, fullscreen: false)
|
||||
} else {
|
||||
strongSelf.controllerInteraction?.activateAdAction(message.id, nil, true, false)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return context.sharedContext.openChatMessage(OpenChatMessageParams(context: context, updatedPresentationData: strongSelf.updatedPresentationData, chatLocation: openChatLocation, chatFilterTag: chatFilterTag, chatLocationContextHolder: strongSelf.chatLocationContextHolder, message: message, mediaIndex: params.mediaIndex, standalone: standalone, reverseMessageGalleryOrder: false, mode: mode, navigationController: strongSelf.effectiveNavigationController, dismissInput: {
|
||||
self?.chatDisplayNode.dismissInput()
|
||||
}, present: { c, a, i in
|
||||
@ -1391,7 +1400,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
}, openAd: { [weak self] messageId in
|
||||
if let strongSelf = self {
|
||||
strongSelf.controllerInteraction?.activateAdAction(messageId, nil)
|
||||
strongSelf.controllerInteraction?.activateAdAction(messageId, nil, true, true)
|
||||
}
|
||||
}, addContact: { [weak self] phoneNumber in
|
||||
if let strongSelf = self {
|
||||
@ -3903,7 +3912,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
return
|
||||
}
|
||||
self.openWebApp(buttonText: buttonText, url: url, simple: simple, source: source)
|
||||
}, activateAdAction: { [weak self] messageId, progress in
|
||||
}, activateAdAction: { [weak self] messageId, progress, media, fullscreen in
|
||||
guard let self, let message = self.chatDisplayNode.historyNode.messageInCurrentHistoryView(messageId), let adAttribute = message.adAttribute else {
|
||||
return
|
||||
}
|
||||
@ -3917,7 +3926,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
}
|
||||
|
||||
self.chatDisplayNode.historyNode.adMessagesContext?.markAction(opaqueId: adAttribute.opaqueId, media: false, fullscreen: false)
|
||||
self.chatDisplayNode.historyNode.adMessagesContext?.markAction(opaqueId: adAttribute.opaqueId, media: media, fullscreen: fullscreen)
|
||||
self.controllerInteraction?.openUrl(ChatControllerInteraction.OpenUrl(url: adAttribute.url, concealed: false, external: true, progress: progress))
|
||||
}, openRequestedPeerSelection: { [weak self] messageId, peerType, buttonId, maxQuantity in
|
||||
guard let self else {
|
||||
@ -4618,6 +4627,11 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
return
|
||||
}
|
||||
self.chatDisplayNode.forceUpdateWarpContents()
|
||||
}, playShakeAnimation: { [weak self] in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.playShakeAnimation()
|
||||
}, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, pollActionState: ChatInterfacePollActionState(), stickerSettings: self.stickerSettings, presentationContext: ChatPresentationContext(context: context, backgroundNode: self.chatBackgroundNode))
|
||||
controllerInteraction.enableFullTranslucency = context.sharedContext.energyUsageSettings.fullTranslucency
|
||||
|
||||
|
@ -298,7 +298,7 @@ func canReplyInChat(_ chatPresentationInterfaceState: ChatPresentationInterfaceS
|
||||
return false
|
||||
}
|
||||
|
||||
guard !peer.id.isReplies else {
|
||||
guard !peer.id.isRepliesOrVerificationCodes else {
|
||||
return false
|
||||
}
|
||||
switch chatPresentationInterfaceState.mode {
|
||||
@ -725,7 +725,7 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState
|
||||
}
|
||||
}
|
||||
|
||||
if Namespaces.Message.allNonRegular.contains(message.id.namespace) || message.id.peerId.isReplies {
|
||||
if Namespaces.Message.allNonRegular.contains(message.id.namespace) || message.id.peerId.isRepliesOrVerificationCodes {
|
||||
canReply = false
|
||||
canPin = false
|
||||
} else if messages[0].flags.intersection([.Failed, .Unsent]).isEmpty {
|
||||
|
@ -137,7 +137,7 @@ func inputPanelForChatPresentationIntefaceState(_ chatPresentationInterfaceState
|
||||
var displayInputTextPanel = false
|
||||
|
||||
if let peer = chatPresentationInterfaceState.renderedPeer?.peer {
|
||||
if peer.id.isReplies {
|
||||
if peer.id.isRepliesOrVerificationCodes {
|
||||
if let currentPanel = (currentPanel as? ChatChannelSubscriberInputPanelNode) ?? (currentSecondaryPanel as? ChatChannelSubscriberInputPanelNode) {
|
||||
return (currentPanel, nil)
|
||||
} else {
|
||||
|
@ -171,7 +171,7 @@ func rightNavigationButtonForChatInterfaceState(context: AccountContext, present
|
||||
}
|
||||
}
|
||||
if case let .peer(peerId) = presentationInterfaceState.chatLocation {
|
||||
if peerId.isReplies {
|
||||
if peerId.isRepliesOrVerificationCodes {
|
||||
if hasMessages {
|
||||
if case .search = currentButton?.action {
|
||||
return currentButton
|
||||
|
@ -165,7 +165,7 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, ASGestu
|
||||
}, openLargeEmojiInfo: { _, _, _ in
|
||||
}, openJoinLink: { _ in
|
||||
}, openWebView: { _, _, _, _ in
|
||||
}, activateAdAction: { _, _ in
|
||||
}, activateAdAction: { _, _, _, _ in
|
||||
}, openRequestedPeerSelection: { _, _, _, _ in
|
||||
}, saveMediaToFiles: { _ in
|
||||
}, openNoAdsDemo: {
|
||||
@ -185,6 +185,7 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, ASGestu
|
||||
}, navigateToStory: { _, _ in
|
||||
}, attemptedNavigationToPrivateQuote: { _ in
|
||||
}, forceUpdateWarpContents: {
|
||||
}, playShakeAnimation: {
|
||||
}, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(), presentationContext: ChatPresentationContext(context: context, backgroundNode: nil))
|
||||
|
||||
self.dimNode = ASDisplayNode()
|
||||
|
@ -1776,7 +1776,7 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
||||
}, openLargeEmojiInfo: { _, _, _ in
|
||||
}, openJoinLink: { _ in
|
||||
}, openWebView: { _, _, _, _ in
|
||||
}, activateAdAction: { _, _ in
|
||||
}, activateAdAction: { _, _, _, _ in
|
||||
}, openRequestedPeerSelection: { _, _, _, _ in
|
||||
}, saveMediaToFiles: { _ in
|
||||
}, openNoAdsDemo: {
|
||||
@ -1796,6 +1796,7 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
||||
}, navigateToStory: { _, _ in
|
||||
}, attemptedNavigationToPrivateQuote: { _ in
|
||||
}, forceUpdateWarpContents: {
|
||||
}, playShakeAnimation: {
|
||||
}, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings,
|
||||
pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(), presentationContext: ChatPresentationContext(context: context, backgroundNode: backgroundNode as? WallpaperBackgroundNode))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user