Merge branch 'master' into holes

This commit is contained in:
Peter
2019-03-28 18:42:30 +04:00
71 changed files with 4539 additions and 3697 deletions

View File

@@ -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