mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Merge branch 'master' into holes
This commit is contained in:
@@ -257,7 +257,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
break
|
||||
case .ignore:
|
||||
return .fail
|
||||
case .url, .peerMention, .textMention, .botCommand, .hashtag, .instantPage, .wallpaper, .call, .openMessage:
|
||||
case .url, .peerMention, .textMention, .botCommand, .hashtag, .instantPage, .wallpaper, .call, .openMessage, .timecode:
|
||||
return .waitForSingleTap
|
||||
}
|
||||
}
|
||||
@@ -1612,6 +1612,35 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
switch recognizer.state {
|
||||
case .ended:
|
||||
if let (gesture, location) = recognizer.lastRecognizedGestureAndLocation {
|
||||
var mediaMessage: Message?
|
||||
var forceOpen = false
|
||||
if let item = self.item {
|
||||
for media in item.message.media {
|
||||
if let file = media as? TelegramMediaFile, file.duration != nil {
|
||||
mediaMessage = item.message
|
||||
}
|
||||
}
|
||||
var forceOpen = false
|
||||
if mediaMessage == nil {
|
||||
for attribute in item.message.attributes {
|
||||
if let attribute = attribute as? ReplyMessageAttribute {
|
||||
if let replyMessage = item.message.associatedMessages[attribute.messageId] {
|
||||
for media in replyMessage.media {
|
||||
if let file = media as? TelegramMediaFile, file.duration != nil {
|
||||
mediaMessage = replyMessage
|
||||
forceOpen = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if mediaMessage == nil {
|
||||
mediaMessage = item.message
|
||||
}
|
||||
}
|
||||
|
||||
switch gesture {
|
||||
case .tap:
|
||||
if let avatarNode = self.accessoryItemNode as? ChatMessageAvatarAccessoryItemNode, avatarNode.frame.contains(location) {
|
||||
@@ -1727,6 +1756,12 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
let _ = item.controllerInteraction.openMessage(item.message, .default)
|
||||
}
|
||||
break loop
|
||||
case let .timecode(timecode, _):
|
||||
foundTapAction = true
|
||||
if let item = self.item, let mediaMessage = mediaMessage {
|
||||
item.controllerInteraction.seekToTimecode(mediaMessage, timecode, forceOpen)
|
||||
}
|
||||
break loop
|
||||
}
|
||||
}
|
||||
if !foundTapAction {
|
||||
@@ -1734,6 +1769,8 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
}
|
||||
case .longTap, .doubleTap:
|
||||
if let item = self.item, self.backgroundNode.frame.contains(location) {
|
||||
let message = item.message
|
||||
|
||||
var foundTapAction = false
|
||||
var tapMessage: Message? = item.content.firstMessage
|
||||
var selectAll = true
|
||||
@@ -1750,23 +1787,23 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
break
|
||||
case let .url(url, _):
|
||||
foundTapAction = true
|
||||
item.controllerInteraction.longTap(.url(url))
|
||||
item.controllerInteraction.longTap(.url(url), message)
|
||||
break loop
|
||||
case let .peerMention(peerId, mention):
|
||||
foundTapAction = true
|
||||
item.controllerInteraction.longTap(.peerMention(peerId, mention))
|
||||
item.controllerInteraction.longTap(.peerMention(peerId, mention), message)
|
||||
break loop
|
||||
case let .textMention(name):
|
||||
foundTapAction = true
|
||||
item.controllerInteraction.longTap(.mention(name))
|
||||
item.controllerInteraction.longTap(.mention(name), message)
|
||||
break loop
|
||||
case let .botCommand(command):
|
||||
foundTapAction = true
|
||||
item.controllerInteraction.longTap(.command(command))
|
||||
item.controllerInteraction.longTap(.command(command), message)
|
||||
break loop
|
||||
case let .hashtag(_, hashtag):
|
||||
foundTapAction = true
|
||||
item.controllerInteraction.longTap(.hashtag(hashtag))
|
||||
item.controllerInteraction.longTap(.hashtag(hashtag), message)
|
||||
break loop
|
||||
case .instantPage:
|
||||
break
|
||||
@@ -1777,6 +1814,12 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
case .openMessage:
|
||||
foundTapAction = false
|
||||
break
|
||||
case let .timecode(timecode, text):
|
||||
foundTapAction = true
|
||||
if let mediaMessage = mediaMessage {
|
||||
item.controllerInteraction.longTap(.timecode(timecode, text), mediaMessage)
|
||||
}
|
||||
break loop
|
||||
}
|
||||
}
|
||||
if !foundTapAction, let tapMessage = tapMessage {
|
||||
@@ -1932,7 +1975,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
|
||||
}
|
||||
|
||||
|
||||
override func playMediaWithSound() -> (() -> Void, Bool, Bool, Bool, ASDisplayNode?)? {
|
||||
override func playMediaWithSound() -> ((Double?) -> Void, Bool, Bool, Bool, ASDisplayNode?)? {
|
||||
for contentNode in self.contentNodes {
|
||||
if let playMediaWithSound = contentNode.playMediaWithSound() {
|
||||
return playMediaWithSound
|
||||
|
||||
Reference in New Issue
Block a user