Swiftgram/submodules/TelegramCore/Sources/State/PremiumRequiredToContact.swift
2024-01-11 20:31:37 +04:00

43 lines
1.7 KiB
Swift

import SwiftSignalKit
import Postbox
import TelegramApi
internal func _internal_updateIsPremiumRequiredToContact(account: Account, peerIds: [EnginePeer.Id]) -> Signal<[EnginePeer.Id], NoError> {
return account.postbox.transaction { transaction -> [Api.InputUser] in
var inputUsers: [Api.InputUser] = []
for id in peerIds {
if let peer = transaction.getPeer(id), let inputUser = apiInputUser(peer) {
inputUsers.append(inputUser)
}
}
return inputUsers
} |> mapToSignal { inputUsers -> Signal<[EnginePeer.Id], NoError> in
return account.network.request(Api.functions.users.getIsPremiumRequiredToContact(id: inputUsers))
|> retryRequest
|> mapToSignal { result in
return account.postbox.transaction { transaction in
var requiredPeerIds: [EnginePeer.Id] = []
for (i, req) in result.enumerated() {
let peerId = peerIds[i]
let required = req == .boolTrue
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, cachedData in
let data = cachedData as? CachedUserData ?? CachedUserData()
var flags = data.flags
if required {
flags.insert(.premiumRequired)
} else {
flags.remove(.premiumRequired)
}
return data.withUpdatedFlags(flags)
})
if required {
requiredPeerIds.append(peerId)
}
}
return requiredPeerIds
}
}
}
}