From 4e96f34992cbb0bb587efb47cb0f96262fdfe6bf Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Sat, 25 May 2024 21:31:39 +0400 Subject: [PATCH] Various fixes --- .../Sources/HashtagSearchControllerNode.swift | 22 ++++++++++++++++--- ...ChatInlineSearchResultsListComponent.swift | 10 ++++++--- .../ChatInterfaceStateContextMenus.swift | 4 +++- .../Sources/ChatTagSearchInputPanelNode.swift | 10 ++++++++- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/submodules/HashtagSearchUI/Sources/HashtagSearchControllerNode.swift b/submodules/HashtagSearchUI/Sources/HashtagSearchControllerNode.swift index 3dec889a25..6012db359d 100644 --- a/submodules/HashtagSearchUI/Sources/HashtagSearchControllerNode.swift +++ b/submodules/HashtagSearchUI/Sources/HashtagSearchControllerNode.swift @@ -54,7 +54,8 @@ final class HashtagSearchControllerNode: ASDisplayNode { self.shimmerNode.allowsGroupOpacity = true self.recentListNode = HashtagSearchRecentListNode(context: context) - + self.recentListNode.alpha = 0.0 + let navigationController = controller.navigationController as? NavigationController if let peer { self.currentController = context.sharedContext.makeChatController(context: context, chatLocation: .peer(id: peer.id), subject: nil, botStart: nil, mode: .inline(navigationController)) @@ -150,6 +151,10 @@ final class HashtagSearchControllerNode: ASDisplayNode { } self.searchContentNode.query = query self.updateSearchQuery(query) + + Queue.mainQueue().after(0.4) { + let _ = addRecentHashtagSearchQuery(engine: context.engine, string: query).startStandalone() + } } self.currentController?.isSelectingMessagesUpdated = { [weak self] isSelecting in @@ -303,9 +308,20 @@ final class HashtagSearchControllerNode: ASDisplayNode { self.insertSubnode(self.recentListNode, aboveSubnode: self.shimmerNode) } - self.recentListNode.frame = CGRect(origin: .zero, size: layout.size) + transition.updateFrame(node: self.recentListNode, frame: CGRect(origin: .zero, size: layout.size)) self.recentListNode.updateLayout(layout: ContainerViewLayout(size: layout.size, metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(top: insets.top - 35.0, left: layout.safeInsets.left, bottom: layout.intrinsicInsets.bottom, right: layout.safeInsets.right), safeInsets: layout.safeInsets, additionalInsets: layout.additionalInsets, statusBarHeight: nil, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: false, inVoiceOver: false), transition: transition) - self.recentListNode.isHidden = !self.query.isEmpty + + let recentTransition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut) + if self.query.isEmpty { + recentTransition.updateAlpha(node: self.recentListNode, alpha: 1.0) + } else if self.recentListNode.alpha > 0.0 { + Queue.mainQueue().after(0.1, { + if !self.query.isEmpty { + recentTransition.updateAlpha(node: self.recentListNode, alpha: 0.0) + } + }) + } + if !self.hasValidLayout { self.hasValidLayout = true diff --git a/submodules/TelegramUI/Components/Chat/ChatInlineSearchResultsListComponent/Sources/ChatInlineSearchResultsListComponent.swift b/submodules/TelegramUI/Components/Chat/ChatInlineSearchResultsListComponent/Sources/ChatInlineSearchResultsListComponent.swift index d8a51a421e..13552cf68f 100644 --- a/submodules/TelegramUI/Components/Chat/ChatInlineSearchResultsListComponent/Sources/ChatInlineSearchResultsListComponent.swift +++ b/submodules/TelegramUI/Components/Chat/ChatInlineSearchResultsListComponent/Sources/ChatInlineSearchResultsListComponent.swift @@ -768,10 +768,14 @@ public final class ChatInlineSearchResultsListComponent: Component { } let renderedPeer: EngineRenderedPeer - if let effectiveAuthor { + if let effectiveAuthor, !component.showEmptyResults { renderedPeer = EngineRenderedPeer(peer: effectiveAuthor) } else { - renderedPeer = EngineRenderedPeer(peerId: message.id.peerId, peers: [:], associatedMedia: [:]) + var peers: [EnginePeer.Id: EnginePeer] = [:] + if let peer = message.peers[message.id.peerId] { + peers[message.id.peerId] = EnginePeer(peer) + } + renderedPeer = EngineRenderedPeer(peerId: message.id.peerId, peers: peers, associatedMedia: [:]) } return ChatListItem( @@ -800,7 +804,7 @@ public final class ChatInlineSearchResultsListComponent: Component { inputActivities: nil, promoInfo: nil, ignoreUnreadBadge: false, - displayAsMessage: component.peerId != component.context.account.peerId, + displayAsMessage: component.peerId != component.context.account.peerId && !component.showEmptyResults, hasFailedMessages: false, forumTopicData: nil, topForumTopicItems: [], diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index 4e523d99df..932855e496 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -281,10 +281,12 @@ private func canViewReadStats(message: Message, participantCount: Int?, isMessag } func canReplyInChat(_ chatPresentationInterfaceState: ChatPresentationInterfaceState, accountPeerId: PeerId) -> Bool { + if case let .customChatContents(contents) = chatPresentationInterfaceState.subject, case .hashTagSearch = contents.kind { + return false + } if case .customChatContents = chatPresentationInterfaceState.chatLocation { return true } - guard let peer = chatPresentationInterfaceState.renderedPeer?.peer else { return false } diff --git a/submodules/TelegramUI/Sources/ChatTagSearchInputPanelNode.swift b/submodules/TelegramUI/Sources/ChatTagSearchInputPanelNode.swift index ae0a6a3767..d1d04db7e9 100644 --- a/submodules/TelegramUI/Sources/ChatTagSearchInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatTagSearchInputPanelNode.swift @@ -228,7 +228,15 @@ final class ChatTagSearchInputPanelNode: ChatInputPanelNode { if let currentId = results.currentId, let index = results.messageIndices.firstIndex(where: { $0.id == currentId }) { canChangeListMode = true - if params.interfaceState.displayHistoryFilterAsList || self.alwaysShowTotalMessagesCount { + if self.alwaysShowTotalMessagesCount { + let value = presentationStringsFormattedNumber(Int32(displayTotalCount), params.interfaceState.dateTimeFormat.groupingSeparator) + let suffix = params.interfaceState.strings.Chat_BottomSearchPanel_MessageCount(Int32(displayTotalCount)) + resultsTextString = [AnimatedTextComponent.Item( + id: "text", + isUnbreakable: true, + content: .text(params.interfaceState.strings.Chat_BottomSearchPanel_MessageCountFormat(value, suffix).string) + )] + } else if params.interfaceState.displayHistoryFilterAsList { resultsTextString = extractAnimatedTextString(string: params.interfaceState.strings.Chat_BottomSearchPanel_MessageCountFormat( ".", "."