Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios

This commit is contained in:
Ilya Laktyushin 2021-03-09 18:46:28 +04:00
commit 56b8761d6b
3 changed files with 43 additions and 35 deletions

View File

@ -12,7 +12,7 @@ public final class ThreadPoolTask {
self.action = action self.action = action
} }
func execute() { public func execute() {
if !state.cancelled.with({ $0 }) { if !state.cancelled.with({ $0 }) {
self.action(self.state) self.action(self.state)
} }

View File

@ -1768,17 +1768,20 @@ public func editGroupCallTitle(account: Account, callId: Int64, accessHash: Int6
} }
} }
public func groupCallDisplayAsAvailablePeers(network: Network, postbox: Postbox) -> Signal<[FoundPeer], NoError> { public func groupCallDisplayAsAvailablePeers(network: Network, postbox: Postbox, peerId: PeerId) -> Signal<[FoundPeer], NoError> {
return network.request(Api.functions.channels.getAdminedPublicChannels(flags: 1 << 2))
return postbox.transaction { transaction -> Api.InputPeer? in
return transaction.getPeer(peerId).flatMap(apiInputPeer)
} |> mapToSignal { inputPeer in
guard let inputPeer = inputPeer else {
return .complete()
}
return network.request(Api.functions.phone.getGroupCallJoinAs(peer: inputPeer))
|> retryRequest |> retryRequest
|> mapToSignal { result in |> mapToSignal { result in
let chats: [Api.Chat] var peers:[Peer]
switch result { switch result {
case let .chatsSlice(_, c): case let .joinAsPeers(peers, chats, users):
chats = c
case let .chats(c):
chats = c
}
var subscribers: [PeerId: Int32] = [:] var subscribers: [PeerId: Int32] = [:]
let peers = chats.compactMap(parseTelegramGroupOrChannel) let peers = chats.compactMap(parseTelegramGroupOrChannel)
for chat in chats { for chat in chats {
@ -1795,7 +1798,6 @@ public func groupCallDisplayAsAvailablePeers(network: Network, postbox: Postbox)
} }
} }
} }
return postbox.transaction { transaction -> [Peer] in return postbox.transaction { transaction -> [Peer] in
updatePeers(transaction: transaction, peers: peers, update: { _, updated in updatePeers(transaction: transaction, peers: peers, update: { _, updated in
return updated return updated
@ -1807,6 +1809,11 @@ public func groupCallDisplayAsAvailablePeers(network: Network, postbox: Postbox)
} }
} }
}
}
public final class CachedDisplayAsPeers: PostboxCoding { public final class CachedDisplayAsPeers: PostboxCoding {
public let peerIds: [PeerId] public let peerIds: [PeerId]
public let timestamp: Int32 public let timestamp: Int32
@ -1827,8 +1834,9 @@ public final class CachedDisplayAsPeers: PostboxCoding {
} }
} }
public func cachedGroupCallDisplayAsAvailablePeers(account: Account) -> Signal<[FoundPeer], NoError> { public func cachedGroupCallDisplayAsAvailablePeers(account: Account, peerId: PeerId) -> Signal<[FoundPeer], NoError> {
let key = ValueBoxKey(length: 0) let key = ValueBoxKey(length: 8)
key.setInt64(0, value: peerId.toInt64())
return account.postbox.transaction { transaction -> ([FoundPeer], Int32)? in return account.postbox.transaction { transaction -> ([FoundPeer], Int32)? in
let cached = transaction.retrieveItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.cachedGroupCallDisplayAsPeers, key: key)) as? CachedDisplayAsPeers let cached = transaction.retrieveItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.cachedGroupCallDisplayAsPeers, key: key)) as? CachedDisplayAsPeers
if let cached = cached { if let cached = cached {
@ -1852,7 +1860,7 @@ public func cachedGroupCallDisplayAsAvailablePeers(account: Account) -> Signal<[
if let (cachedPeers, timestamp) = cachedPeersAndTimestamp, currentTimestamp - timestamp < 60 * 5 { if let (cachedPeers, timestamp) = cachedPeersAndTimestamp, currentTimestamp - timestamp < 60 * 5 {
return .single(cachedPeers) return .single(cachedPeers)
} else { } 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 |> mapToSignal { peers -> Signal<[FoundPeer], NoError> in
return account.postbox.transaction { transaction -> [FoundPeer] in return account.postbox.transaction { transaction -> [FoundPeer] in
let currentTimestamp = Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) let currentTimestamp = Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970)

@ -1 +1 @@
Subproject commit 18ed939bf6818139f7147cde1c34cf22eb5080a2 Subproject commit 2c55abafe21cf67128dc3733844e37276fbcabb3