import Foundation import SwiftSignalKit import Postbox import TelegramApi func _internal_findChannelById(accountPeerId: PeerId, postbox: Postbox, network: Network, channelId: Int64) -> Signal { return network.request(Api.functions.channels.getChannels(id: [.inputChannel(.init(channelId: channelId, accessHash: 0))])) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) } |> mapToSignal { result -> Signal in return postbox.transaction { transaction -> Peer? in guard let result = result else { return nil } let chats: [Api.Chat] switch result { case let .chats(chatsData): let apiChats = chatsData.chats chats = apiChats case let .chatsSlice(chatsSliceData): let (_, apiChats) = (chatsSliceData.count, chatsSliceData.chats) chats = apiChats } guard let id = chats.first?.peerId else { return nil } let parsedPeers = AccumulatedPeers(transaction: transaction, chats: chats, users: []) updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: parsedPeers) return transaction.getPeer(id) } } }