Swiftgram/TelegramCore/PeerSpecificStickerPack.swift
Peter Iakovlev 5eeaed40c2 no message
2018-03-20 16:08:15 +04:00

44 lines
1.8 KiB
Swift

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 case let .result(info, items, _) = result {
return (info, items)
} else {
return nil
}
}
} else {
return .single(nil)
}
}
} else {
return .single(nil)
}
}