import Foundation #if os(macOS) import PostboxMac import SwiftSignalKitMac #else import Postbox import SwiftSignalKit #endif private struct WrappedStickerPackCollectionInfo: Equatable { let info: StickerPackCollectionInfo? static func ==(lhs: WrappedStickerPackCollectionInfo, rhs: WrappedStickerPackCollectionInfo) -> Bool { return lhs.info == rhs.info } } public func peerSpecificStickerPack(postbox: Postbox, network: Network, peerId: PeerId) -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem])?, NoError> { if peerId.namespace == Namespaces.Peer.CloudChannel { return postbox.combinedView(keys: [.cachedPeerData(peerId: peerId)]) |> map { view -> WrappedStickerPackCollectionInfo in let dataView = view.views[.cachedPeerData(peerId: peerId)] as? CachedPeerDataView return WrappedStickerPackCollectionInfo(info: (dataView?.cachedPeerData as? CachedChannelData)?.stickerPack) } |> distinctUntilChanged |> mapToSignal { info -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem])?, NoError> in if let info = info.info { return cachedStickerPack(postbox: postbox, network: network, reference: .id(id: info.id.id, accessHash: info.accessHash)) |> map { result -> (StickerPackCollectionInfo, [ItemCollectionItem])? in if let result = result { return (result.0, result.1) } else { return nil } } } else { return .single(nil) } } } else { return .single(nil) } }