diff --git a/submodules/SSignalKit/SwiftSignalKit/Source/ThreadPool.swift b/submodules/SSignalKit/SwiftSignalKit/Source/ThreadPool.swift index b972888763..b56f0c275a 100644 --- a/submodules/SSignalKit/SwiftSignalKit/Source/ThreadPool.swift +++ b/submodules/SSignalKit/SwiftSignalKit/Source/ThreadPool.swift @@ -12,7 +12,7 @@ public final class ThreadPoolTask { self.action = action } - func execute() { + public func execute() { if !state.cancelled.with({ $0 }) { self.action(self.state) } diff --git a/submodules/TelegramCore/Sources/GroupCalls.swift b/submodules/TelegramCore/Sources/GroupCalls.swift index 793b115650..6985fe7b1a 100644 --- a/submodules/TelegramCore/Sources/GroupCalls.swift +++ b/submodules/TelegramCore/Sources/GroupCalls.swift @@ -1768,43 +1768,50 @@ public func editGroupCallTitle(account: Account, callId: Int64, accessHash: Int6 } } -public func groupCallDisplayAsAvailablePeers(network: Network, postbox: Postbox) -> Signal<[FoundPeer], NoError> { - return network.request(Api.functions.channels.getAdminedPublicChannels(flags: 1 << 2)) - |> retryRequest - |> mapToSignal { result in - let chats: [Api.Chat] - switch result { - case let .chatsSlice(_, c): - chats = c - case let .chats(c): - chats = c +public func groupCallDisplayAsAvailablePeers(network: Network, postbox: Postbox, peerId: PeerId) -> Signal<[FoundPeer], NoError> { + + return postbox.transaction { transaction -> Api.InputPeer? in + return transaction.getPeer(peerId).flatMap(apiInputPeer) + } |> mapToSignal { inputPeer in + guard let inputPeer = inputPeer else { + return .complete() } - var subscribers: [PeerId: Int32] = [:] - let peers = chats.compactMap(parseTelegramGroupOrChannel) - for chat in chats { - if let groupOrChannel = parseTelegramGroupOrChannel(chat: chat) { - switch chat { - case let .channel(_, _, _, _, _, _, _, _, _, _, _, _, participantsCount): - if let participantsCount = participantsCount { - subscribers[groupOrChannel.id] = participantsCount + return network.request(Api.functions.phone.getGroupCallJoinAs(peer: inputPeer)) + |> retryRequest + |> mapToSignal { result in + var peers:[Peer] + switch result { + case let .joinAsPeers(peers, chats, users): + var subscribers: [PeerId: Int32] = [:] + let peers = chats.compactMap(parseTelegramGroupOrChannel) + for chat in chats { + if let groupOrChannel = parseTelegramGroupOrChannel(chat: chat) { + switch chat { + case let .channel(_, _, _, _, _, _, _, _, _, _, _, _, participantsCount): + if let participantsCount = participantsCount { + subscribers[groupOrChannel.id] = participantsCount + } + case let .chat(_, _, _, _, participantsCount, _, _, _, _, _): + subscribers[groupOrChannel.id] = participantsCount + default: + break + } } - case let .chat(_, _, _, _, participantsCount, _, _, _, _, _): - subscribers[groupOrChannel.id] = participantsCount - default: - break + } + return postbox.transaction { transaction -> [Peer] in + updatePeers(transaction: transaction, peers: peers, update: { _, updated in + return updated + }) + return peers + } |> map { peers -> [FoundPeer] in + return peers.map { FoundPeer(peer: $0, subscribers: subscribers[$0.id]) } } } } - return postbox.transaction { transaction -> [Peer] in - updatePeers(transaction: transaction, peers: peers, update: { _, updated in - return updated - }) - return peers - } |> map { peers -> [FoundPeer] in - return peers.map { FoundPeer(peer: $0, subscribers: subscribers[$0.id]) } - } } + + } public final class CachedDisplayAsPeers: PostboxCoding { @@ -1827,8 +1834,9 @@ public final class CachedDisplayAsPeers: PostboxCoding { } } -public func cachedGroupCallDisplayAsAvailablePeers(account: Account) -> Signal<[FoundPeer], NoError> { - let key = ValueBoxKey(length: 0) +public func cachedGroupCallDisplayAsAvailablePeers(account: Account, peerId: PeerId) -> Signal<[FoundPeer], NoError> { + let key = ValueBoxKey(length: 8) + key.setInt64(0, value: peerId.toInt64()) return account.postbox.transaction { transaction -> ([FoundPeer], Int32)? in let cached = transaction.retrieveItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.cachedGroupCallDisplayAsPeers, key: key)) as? CachedDisplayAsPeers if let cached = cached { @@ -1852,7 +1860,7 @@ public func cachedGroupCallDisplayAsAvailablePeers(account: Account) -> Signal<[ if let (cachedPeers, timestamp) = cachedPeersAndTimestamp, currentTimestamp - timestamp < 60 * 5 { return .single(cachedPeers) } else { - return groupCallDisplayAsAvailablePeers(network: account.network, postbox: account.postbox) + return groupCallDisplayAsAvailablePeers(network: account.network, postbox: account.postbox, peerId: peerId) |> mapToSignal { peers -> Signal<[FoundPeer], NoError> in return account.postbox.transaction { transaction -> [FoundPeer] in let currentTimestamp = Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index 18ed939bf6..2c55abafe2 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit 18ed939bf6818139f7147cde1c34cf22eb5080a2 +Subproject commit 2c55abafe21cf67128dc3733844e37276fbcabb3