diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index a4e50d50ff..a1c4f7771e 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -5382,10 +5382,17 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if case let .messageOptions(_, _, info) = presentationInterfaceState.subject { if case .reply = info { //TODO:localize + let titleContent: ChatTitleContent if case let .reply(hasQuote) = messageOptionsTitleInfo, hasQuote { - strongSelf.chatTitleView?.titleContent = .custom("Reply to Quote", subtitleText, false) + titleContent = .custom("Reply to Quote", subtitleText, false) } else { - strongSelf.chatTitleView?.titleContent = .custom("Reply to Message", subtitleText, false) + titleContent = .custom("Reply to Message", subtitleText, false) + } + if strongSelf.chatTitleView?.titleContent != titleContent { + if strongSelf.chatTitleView?.titleContent != nil { + strongSelf.chatTitleView?.animateLayoutTransition() + } + strongSelf.chatTitleView?.titleContent = titleContent } } else if case .link = info { //TODO:localize diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 0125d2c3c5..9dba950e83 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -487,8 +487,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { return (messages, Int32(messages.count), false) } - source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), loadMore: nil) - case .reply: + source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), quote: nil, loadMore: nil) + case let .reply(reply): let messages = combineLatest(context.account.postbox.messagesAtIds(messageIds), context.account.postbox.loadedPeerWithId(context.account.peerId)) |> map { messages, accountPeer -> ([Message], Int32, Bool) in var messages = messages @@ -501,7 +501,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { return (messages, Int32(messages.count), false) } - source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), loadMore: nil) + source = .custom(messages: messages, messageId: messageIds.first ?? MessageId(peerId: PeerId(0), namespace: 0, id: 0), quote: reply.quote?.text, loadMore: nil) case let .link(link): let messages = link.options |> mapToSignal { options -> Signal<(ChatControllerSubject.LinkOptions, Peer, Message?), NoError> in @@ -576,7 +576,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { return ([message], 1, false) } - source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), loadMore: nil) + source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), quote: nil, loadMore: nil) } } else { source = .default diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index 7dccbb0970..d1ee5742b6 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -417,7 +417,7 @@ private var nextClientId: Int32 = 1 public enum ChatHistoryListSource { case `default` - case custom(messages: Signal<([Message], Int32, Bool), NoError>, messageId: MessageId, loadMore: (() -> Void)?) + case custom(messages: Signal<([Message], Int32, Bool), NoError>, messageId: MessageId, quote: String?, loadMore: (() -> Void)?) } public final class ChatHistoryListNode: ListView, ChatHistoryNode { @@ -1083,7 +1083,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { let historyViewUpdate: Signal<(ChatHistoryViewUpdate, Int, ChatHistoryLocationInput?, ClosedRange?), NoError> var isFirstTime = true var updateAllOnEachVersion = false - if case let .custom(messages, at, _) = self.source { + if case let .custom(messages, at, quote, _) = self.source { updateAllOnEachVersion = true historyViewUpdate = messages |> map { messages, _, hasMore in @@ -1097,7 +1097,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { let scrollPosition: ChatHistoryViewScrollPosition? if isFirstTime, let messageIndex = messages.first(where: { $0.id == at })?.index { - scrollPosition = .index(subject: MessageHistoryScrollToSubject(index: .message(messageIndex), quote: nil), position: .center(.bottom), directionHint: .Down, animated: false, highlight: false, displayLink: false) + scrollPosition = .index(subject: MessageHistoryScrollToSubject(index: .message(messageIndex), quote: quote), position: .center(.bottom), directionHint: .Down, animated: false, highlight: false, displayLink: false) isFirstTime = false } else { scrollPosition = nil diff --git a/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift b/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift index 9c393ae5ef..648ceaeae5 100644 --- a/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift +++ b/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift @@ -203,7 +203,7 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, UIGestu let source: ChatHistoryListSource if let playlistLocation = playlistLocation as? PeerMessagesPlaylistLocation, case let .custom(messages, at, loadMore) = playlistLocation { - source = .custom(messages: messages, messageId: at, loadMore: loadMore) + source = .custom(messages: messages, messageId: at, quote: nil, loadMore: loadMore) self.isGlobalSearch = true } else { source = .default diff --git a/submodules/TelegramUI/Sources/PreparedChatHistoryViewTransition.swift b/submodules/TelegramUI/Sources/PreparedChatHistoryViewTransition.swift index 31f0d3a9de..21e2e19c5c 100644 --- a/submodules/TelegramUI/Sources/PreparedChatHistoryViewTransition.swift +++ b/submodules/TelegramUI/Sources/PreparedChatHistoryViewTransition.swift @@ -199,16 +199,16 @@ func preparedChatHistoryViewTransition(from fromView: ChatHistoryView?, to toVie var position = position if case .center = position, highlight { scrolledToIndex = scrollSubject - if let quote = scrollSubject.quote { - position = .center(.custom({ itemNode in - if let itemNode = itemNode as? ChatMessageBubbleItemNode { - if let quoteRect = itemNode.getQuoteRect(quote: quote) { - return quoteRect.midY - } + } + if case .center = position, let quote = scrollSubject.quote { + position = .center(.custom({ itemNode in + if let itemNode = itemNode as? ChatMessageBubbleItemNode { + if let quoteRect = itemNode.getQuoteRect(quote: quote) { + return quoteRect.midY } - return 0.0 - })) - } + } + return 0.0 + })) } var index = toView.filteredEntries.count - 1 for entry in toView.filteredEntries {