import Foundation final class MutableTopChatMessageView: MutablePostboxView { private let peerIds: Set fileprivate var messages: [PeerId: Message] = [:] init(postbox: Postbox, peerIds: Set) { self.peerIds = peerIds for peerId in self.peerIds { if let index = postbox.chatListIndexTable.get(peerId: peerId).topMessageIndex { self.messages[peerId] = postbox.getMessage(index.id) } } } func replay(postbox: Postbox, transaction: PostboxTransaction) -> Bool { var updated = false for peerId in self.peerIds { if transaction.currentOperationsByPeerId[peerId] != nil { if let index = postbox.chatListIndexTable.get(peerId: peerId).topMessageIndex { self.messages[peerId] = postbox.getMessage(index.id) } else { self.messages.removeValue(forKey: peerId) } updated = true } } return updated } func immutableView() -> PostboxView { return TopChatMessageView(self) } } public final class TopChatMessageView: PostboxView { public let messages: [PeerId: Message] init(_ view: MutableTopChatMessageView) { self.messages = view.messages } }