import Foundation import Postbox import SwiftSignalKit import TelegramApi import MtProtoKit public func _internal_updateCloseFriends(account: Account, peerIds: [EnginePeer.Id]) -> Signal { let ids: [Int64] = peerIds.map { $0.id._internalGetInt64Value() } return account.network.request(Api.functions.contacts.editCloseFriends(id: ids)) |> retryRequest |> mapToSignal { result -> Signal in return account.postbox.transaction { transaction in let contactPeerIds = transaction.getContactPeerIds() var updatedPeers: [Peer] = [] for peerId in contactPeerIds { if let peer = transaction.getPeer(peerId) as? TelegramUser { if peerIds.contains(peerId) { var updatedFlags = peer.flags updatedFlags.insert(.isCloseFriend) let updatedPeer = peer.withUpdatedFlags(updatedFlags) updatedPeers.append(updatedPeer) } else if peer.flags.contains(.isCloseFriend) { var updatedFlags = peer.flags updatedFlags.remove(.isCloseFriend) let updatedPeer = peer.withUpdatedFlags(updatedFlags) updatedPeers.append(updatedPeer) } } } updatePeers(transaction: transaction, peers: updatedPeers, update: { _, updated in return updated }) } } |> ignoreValues }