import Foundation final class MutablePeerPresencesView: MutablePostboxView { fileprivate let ids: Set fileprivate var presences: [PeerId: PeerPresence] = [:] init(postbox: PostboxImpl, ids: Set) { self.ids = ids for id in ids { if let presence = postbox.peerPresenceTable.get(id) { self.presences[id] = presence } } } func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool { var updated = false if !transaction.currentUpdatedPeerPresences.isEmpty { for (id, presence) in transaction.currentUpdatedPeerPresences { if self.ids.contains(id) { self.presences[id] = presence updated = true } } } return updated } func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool { /*var presences: [PeerId: PeerPresence] = [:] for id in self.ids { if let presence = postbox.peerPresenceTable.get(id) { presences[id] = presence } } var updated = false if self.presences.count != presences.count { updated = true } else { for (key, value) in self.presences { if let other = presences[key] { if !other.isEqual(to: value) { updated = true break } } else { updated = true break } } } if updated { self.presences = presences return true } else { return false }*/ return false } func immutableView() -> PostboxView { return PeerPresencesView(self) } } public final class PeerPresencesView: PostboxView { public let presences: [PeerId: PeerPresence] init(_ view: MutablePeerPresencesView) { self.presences = view.presences } }