Fix topic message search

This commit is contained in:
Ali 2022-12-02 16:03:32 +04:00
parent 68a66f8650
commit a4a2b20337
3 changed files with 58 additions and 18 deletions

View File

@ -738,11 +738,18 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
} else { } else {
let index: EngineChatList.Item.Index let index: EngineChatList.Item.Index
var chatThreadInfo: ChatListItemContent.ThreadInfo? var chatThreadInfo: ChatListItemContent.ThreadInfo?
chatThreadInfo = nil
var displayAsMessage = false
switch location { switch location {
case .chatList: case .chatList:
index = .chatList(EngineChatList.Item.Index.ChatList(pinningIndex: nil, messageIndex: message.index)) index = .chatList(EngineChatList.Item.Index.ChatList(pinningIndex: nil, messageIndex: message.index))
case let .forum(peerId): case let .forum(peerId):
if message.id.peerId == peerId, !"".isEmpty { let _ = peerId
let _ = threadInfo
displayAsMessage = true
if message.id.peerId == peerId {
if let threadId = message.threadId, let threadInfo = threadInfo { if let threadId = message.threadId, let threadInfo = threadInfo {
chatThreadInfo = ChatListItemContent.ThreadInfo(id: threadId, info: threadInfo, isOwnedByMe: false, isClosed: false, isHidden: false) chatThreadInfo = ChatListItemContent.ThreadInfo(id: threadId, info: threadInfo, isOwnedByMe: false, isClosed: false, isHidden: false)
index = .forum(pinnedIndex: .none, timestamp: message.index.timestamp, threadId: threadId, namespace: message.index.id.namespace, id: message.index.id.id) index = .forum(pinnedIndex: .none, timestamp: message.index.timestamp, threadId: threadId, namespace: message.index.id.namespace, id: message.index.id.id)
@ -766,7 +773,7 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
inputActivities: nil, inputActivities: nil,
promoInfo: nil, promoInfo: nil,
ignoreUnreadBadge: true, ignoreUnreadBadge: true,
displayAsMessage: true, displayAsMessage: displayAsMessage,
hasFailedMessages: false, hasFailedMessages: false,
forumTopicData: nil, forumTopicData: nil,
topForumTopicItems: [], topForumTopicItems: [],
@ -1492,7 +1499,13 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
} }
let searchSignals: [Signal<(SearchMessagesResult, SearchMessagesState), NoError>] = searchLocations.map { searchLocation in let searchSignals: [Signal<(SearchMessagesResult, SearchMessagesState), NoError>] = searchLocations.map { searchLocation in
return context.engine.messages.searchMessages(location: searchLocation, query: finalQuery, state: nil, limit: 50) let limit: Int32
#if DEBUG
limit = 50
#else
limit = 50
#endif
return context.engine.messages.searchMessages(location: searchLocation, query: finalQuery, state: nil, limit: limit)
} }
let searchSignal = combineLatest(searchSignals) let searchSignal = combineLatest(searchSignals)
@ -1537,6 +1550,9 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
for i in 0 ..< 2 { for i in 0 ..< 2 {
if let currentContext = searchContexts[i] { if let currentContext = searchContexts[i] {
currentResults.append(FoundRemoteMessages(messages: currentContext.result.messages, readCounters: currentContext.result.readStates, threadsData: currentContext.result.threadInfo, totalCount: currentContext.result.totalCount)) currentResults.append(FoundRemoteMessages(messages: currentContext.result.messages, readCounters: currentContext.result.readStates, threadsData: currentContext.result.threadInfo, totalCount: currentContext.result.totalCount))
if currentContext.result.hasMore {
break
}
} }
} }
return .single((currentResults, false)) return .single((currentResults, false))
@ -1561,6 +1577,9 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
var result: [FoundRemoteMessages] = [] var result: [FoundRemoteMessages] = []
for i in 0 ..< foundMessages.count { for i in 0 ..< foundMessages.count {
result.append(FoundRemoteMessages(messages: foundMessages[i].messages, readCounters: foundMessages[i].readStates, threadsData: foundMessages[i].threadInfo, totalCount: foundMessages[i].totalCount)) result.append(FoundRemoteMessages(messages: foundMessages[i].messages, readCounters: foundMessages[i].readStates, threadsData: foundMessages[i].threadInfo, totalCount: foundMessages[i].totalCount))
if foundMessages[i].hasMore {
break
}
} }
return (result, false) return (result, false)
} }
@ -1865,16 +1884,25 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
let loadMore = { let loadMore = {
updateSearchContexts { previousMap in updateSearchContexts { previousMap in
guard let previous = previousMap[0] else { var updatedMap = previousMap
return ([:], false) var isSearching = false
} for i in 0 ..< 2 {
if let previous = updatedMap[i] {
if previous.loadMoreIndex != nil { if previous.loadMoreIndex != nil {
return ([0: previous], false) continue
} }
guard let last = previous.result.messages.last else { guard let last = previous.result.messages.last else {
return ([0: previous], false) continue
} }
return ([0: ChatListSearchMessagesContext(result: previous.result, loadMoreIndex: last.index)], true) updatedMap[i] = ChatListSearchMessagesContext(result: previous.result, loadMoreIndex: last.index)
isSearching = true
if previous.result.hasMore {
break
}
}
}
return (updatedMap, isSearching)
} }
} }

View File

@ -1590,6 +1590,15 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
} }
} }
let useChatListLayout: Bool
if case .chatList = item.chatListLocation {
useChatListLayout = true
} else if displayAsMessage {
useChatListLayout = true
} else {
useChatListLayout = false
}
let theme = item.presentationData.theme.chatList let theme = item.presentationData.theme.chatList
var updatedTheme: PresentationTheme? var updatedTheme: PresentationTheme?
@ -1653,7 +1662,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
let avatarLeftInset: CGFloat let avatarLeftInset: CGFloat
if item.interaction.isInlineMode { if item.interaction.isInlineMode {
avatarLeftInset = 12.0 avatarLeftInset = 12.0
} else if case .forum = item.index { } else if !useChatListLayout {
avatarLeftInset = 50.0 avatarLeftInset = 50.0
} else { } else {
avatarLeftInset = 18.0 + avatarDiameter avatarLeftInset = 18.0 + avatarDiameter
@ -2501,7 +2510,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
var mainContentBoundsOffset: CGFloat var mainContentBoundsOffset: CGFloat
var mainContentAlpha: CGFloat = 1.0 var mainContentAlpha: CGFloat = 1.0
if case .chatList = item.chatListLocation { if useChatListLayout {
mainContentFrame = CGRect(origin: CGPoint(x: leftInset - 2.0, y: 0.0), size: CGSize(width: layout.contentSize.width, height: layout.contentSize.height)) mainContentFrame = CGRect(origin: CGPoint(x: leftInset - 2.0, y: 0.0), size: CGSize(width: layout.contentSize.width, height: layout.contentSize.height))
mainContentBoundsOffset = mainContentFrame.origin.x mainContentBoundsOffset = mainContentFrame.origin.x
@ -2694,7 +2703,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
} }
} }
if let threadInfo = threadInfo { if let threadInfo = threadInfo, !displayAsMessage {
let avatarIconView: ComponentHostView<Empty> let avatarIconView: ComponentHostView<Empty>
if let current = strongSelf.avatarIconView { if let current = strongSelf.avatarIconView {
avatarIconView = current avatarIconView = current
@ -2742,7 +2751,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
avatarIconView.removeFromSuperview() avatarIconView.removeFromSuperview()
} }
if case .forum = item.index { if !useChatListLayout {
strongSelf.avatarContainerNode.isHidden = true strongSelf.avatarContainerNode.isHidden = true
} else { } else {
strongSelf.avatarContainerNode.isHidden = false strongSelf.avatarContainerNode.isHidden = false

View File

@ -118,6 +118,9 @@ private func mergedState(transaction: Transaction, seedConfiguration: SeedConfig
var peerIdsSet: Set<PeerId> = Set() var peerIdsSet: Set<PeerId> = Set()
var readStates: [PeerId: CombinedPeerReadState] = [:] var readStates: [PeerId: CombinedPeerReadState] = [:]
var threadInfo: [MessageId : MessageHistoryThreadData] = [:] var threadInfo: [MessageId : MessageHistoryThreadData] = [:]
if let state = state {
threadInfo = state.threadInfo
}
var renderedMessages: [Message] = [] var renderedMessages: [Message] = []
for message in messages { for message in messages {