Pass through current found remote peers while updating search results

This commit is contained in:
Peter 2019-07-30 16:50:57 +03:00
parent 137938b1cf
commit 31866487d2

View File

@ -611,10 +611,13 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode {
} }
self.recentListNode.isHidden = filter.contains(.excludeRecent) self.recentListNode.isHidden = filter.contains(.excludeRecent)
let currentRemotePeers = Atomic<([FoundPeer], [FoundPeer])?>(value: nil)
let presentationDataPromise = self.presentationDataPromise let presentationDataPromise = self.presentationDataPromise
let foundItems = self.searchQuery.get() let foundItems = self.searchQuery.get()
|> mapToSignal { query -> Signal<([ChatListSearchEntry], Bool)?, NoError> in |> mapToSignal { query -> Signal<([ChatListSearchEntry], Bool)?, NoError> in
guard let query = query, !query.isEmpty else { guard let query = query, !query.isEmpty else {
let _ = currentRemotePeers.swap(nil)
return .single(nil) return .single(nil)
} }
@ -651,8 +654,9 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode {
} }
let foundRemotePeers: Signal<([FoundPeer], [FoundPeer], Bool), NoError> let foundRemotePeers: Signal<([FoundPeer], [FoundPeer], Bool), NoError>
let currentRemotePeersValue = currentRemotePeers.with { $0 } ?? ([], [])
foundRemotePeers = ( foundRemotePeers = (
.single(([], [], true)) .single((currentRemotePeersValue.0, currentRemotePeersValue.1, true))
|> then( |> then(
searchPeers(account: context.account, query: query) searchPeers(account: context.account, query: query)
|> map { ($0.0, $0.1, false) } |> map { ($0.0, $0.1, false) }
@ -717,6 +721,8 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode {
let isSearching = foundRemotePeers.2 || foundRemoteMessages.1 let isSearching = foundRemotePeers.2 || foundRemoteMessages.1
var index = 0 var index = 0
let _ = currentRemotePeers.swap((foundRemotePeers.0, foundRemotePeers.1))
let filteredPeer:(Peer, Peer) -> Bool = { peer, accountPeer in let filteredPeer:(Peer, Peer) -> Bool = { peer, accountPeer in
guard !filter.contains(.excludeSavedMessages) || peer.id != accountPeer.id else { return false } guard !filter.contains(.excludeSavedMessages) || peer.id != accountPeer.id else { return false }
guard !filter.contains(.excludeSecretChats) || peer.id.namespace != Namespaces.Peer.SecretChat else { return false } guard !filter.contains(.excludeSecretChats) || peer.id.namespace != Namespaces.Peer.SecretChat else { return false }