import Foundation #if os(macOS) import PostboxMac import SwiftSignalKitMac import MtProtoKitMac #else import Postbox import SwiftSignalKit import MtProtoKitDynamic #endif public func requestUpdatePeerIsBlocked(account: Account, peerId: PeerId, isBlocked: Bool) -> Signal { return account.postbox.modify { modifier -> Signal in if let peer = modifier.getPeer(peerId), let inputUser = apiInputUser(peer) { let signal: Signal if isBlocked { signal = account.network.request(Api.functions.contacts.block(id: inputUser)) } else { signal = account.network.request(Api.functions.contacts.unblock(id: inputUser)) } return signal |> map { Optional($0) } |> `catch` { _ -> Signal in return .single(nil) } |> mapToSignal { result -> Signal in return account.postbox.modify { modifier -> Void in if result != nil { modifier.updatePeerCachedData(peerIds: Set([peerId]), update: { _, current in let previous: CachedUserData if let current = current as? CachedUserData { previous = current } else { previous = CachedUserData() } return previous.withUpdatedIsBlocked(isBlocked) }) } } } } else { return .complete() } } |> switchToLatest }