Swiftgram/TelegramUI/SearchPeerMembers.swift
Peter 1fb0bfa240 Various fixes for media streaming
Preload next track when playing music
Added ability to resend failed messages
2018-11-02 22:43:30 +04:00

56 lines
2.9 KiB
Swift

import Foundation
import Postbox
import TelegramCore
import SwiftSignalKit
func searchPeerMembers(account: Account, peerId: PeerId, query: String) -> Signal<[Peer], NoError> {
if peerId.namespace == Namespaces.Peer.CloudChannel && !query.isEmpty {
return account.postbox.transaction { transaction -> CachedChannelData? in
return transaction.getPeerCachedData(peerId: peerId) as? CachedChannelData
}
|> mapToSignal { cachedData -> Signal<[Peer], NoError> in
if let cachedData = cachedData, let memberCount = cachedData.participantsSummary.memberCount, memberCount <= 64 {
return Signal { subscriber in
let (disposable, _) = account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.recent(postbox: account.postbox, network: account.network, accountPeerId: account.peerId, peerId: peerId, searchQuery: nil, requestUpdate: false, updated: { state in
if case .ready = state.loadingState {
let normalizedQuery = query.lowercased()
subscriber.putNext(state.list.compactMap { participant -> Peer? in
if normalizedQuery.isEmpty {
return participant.peer
}
if participant.peer.indexName.matchesByTokens(normalizedQuery) {
return participant.peer
}
if let addressName = participant.peer.addressName, addressName.lowercased().hasPrefix(normalizedQuery) {
return participant.peer
}
return nil
})
}
})
return ActionDisposable {
disposable.dispose()
}
} |> runOn(Queue.mainQueue())
}
return Signal { subscriber in
let (disposable, _) = account.telegramApplicationContext.peerChannelMemberCategoriesContextsManager.recent(postbox: account.postbox, network: account.network, accountPeerId: account.peerId, peerId: peerId, searchQuery: query, updated: { state in
if case .ready = state.loadingState {
subscriber.putNext(state.list.map { $0.peer })
}
})
return ActionDisposable {
disposable.dispose()
}
} |> runOn(Queue.mainQueue())
}
} else {
return searchGroupMembers(postbox: account.postbox, network: account.network, accountPeerId: account.peerId, peerId: peerId, query: query)
}
}