import Foundation import Postbox import SwiftSignalKit import TelegramApi import MtProtoKit private func _internal_updateExtendedMediaById(account: Account, peerId: EnginePeer.Id, messageIds: [EngineMessage.Id]) -> Signal { return account.postbox.transaction { transaction -> Peer? in if let peer = transaction.getPeer(peerId) { return peer } else { return nil } } |> mapToSignal { peer -> Signal in guard let peer = peer, let inputPeer = apiInputPeer(peer) else { return .complete() } return account.network.request(Api.functions.messages.getExtendedMedia(peer: inputPeer, id: messageIds.map { $0.id })) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) } |> mapToSignal { updates -> Signal in if let updates = updates { account.stateManager.addUpdates(updates) } return .complete() } } } func _internal_updateExtendedMedia(account: Account, messageIds: [EngineMessage.Id]) -> Signal { var signals: [Signal] = [] for (peerId, messageIds) in messagesIdsGroupedByPeerId(messageIds) { signals.append(_internal_updateExtendedMediaById(account: account, peerId: peerId, messageIds: messageIds)) } return combineLatest(signals) |> ignoreValues }