mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix topic message search
This commit is contained in:
parent
68a66f8650
commit
a4a2b20337
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user