diff --git a/submodules/TelegramCore/Sources/State/PremiumRequiredToContact.swift b/submodules/TelegramCore/Sources/State/PremiumRequiredToContact.swift index 135943dbe3..e216ce4872 100644 --- a/submodules/TelegramCore/Sources/State/PremiumRequiredToContact.swift +++ b/submodules/TelegramCore/Sources/State/PremiumRequiredToContact.swift @@ -3,22 +3,27 @@ import Postbox import TelegramApi internal func _internal_updateIsPremiumRequiredToContact(account: Account, peerIds: [EnginePeer.Id]) -> Signal<[EnginePeer.Id], NoError> { - return account.postbox.transaction { transaction -> ([Api.InputUser], [PeerId]) in + return account.postbox.transaction { transaction -> ([Api.InputUser], [PeerId], [PeerId]) in var inputUsers: [Api.InputUser] = [] var premiumRequired:[EnginePeer.Id] = [] + var ids:[PeerId] = [] for id in peerIds { if let peer = transaction.getPeer(id), let inputUser = apiInputUser(peer) { - if let cachedData = transaction.getPeerCachedData(peerId: id) as? CachedUserData { - if cachedData.flags.contains(.premiumRequired) { - premiumRequired.append(id) + if peer.isPremium { + if let cachedData = transaction.getPeerCachedData(peerId: id) as? CachedUserData { + if cachedData.flags.contains(.premiumRequired) { + inputUsers.append(inputUser) + ids.append(id) + } + } else if let peer = peer as? TelegramUser, peer.flags.contains(.requirePremium), !peer.flags.contains(.mutualContact) { + inputUsers.append(inputUser) + ids.append(id) } - } else if let peer = peer as? TelegramUser, peer.flags.contains(.requirePremium), !peer.flags.contains(.mutualContact) { - inputUsers.append(inputUser) } } } - return (inputUsers, premiumRequired) - } |> mapToSignal { inputUsers, premiumRequired -> Signal<[EnginePeer.Id], NoError> in + return (inputUsers, premiumRequired, ids) + } |> mapToSignal { inputUsers, premiumRequired, reqIds -> Signal<[EnginePeer.Id], NoError> in if !inputUsers.isEmpty { return account.network.request(Api.functions.users.getIsPremiumRequiredToContact(id: inputUsers)) @@ -27,7 +32,7 @@ internal func _internal_updateIsPremiumRequiredToContact(account: Account, peerI return account.postbox.transaction { transaction in var requiredPeerIds: [EnginePeer.Id] = [] for (i, req) in result.enumerated() { - let peerId = peerIds[i] + let peerId = reqIds[i] let required = req == .boolTrue transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, cachedData in let data = cachedData as? CachedUserData ?? CachedUserData()