Swiftgram/submodules/Postbox/Sources/PeerPresencesView.swift

77 lines
2.1 KiB
Swift

import Foundation
final class MutablePeerPresencesView: MutablePostboxView {
fileprivate let ids: Set<PeerId>
fileprivate var presences: [PeerId: PeerPresence] = [:]
init(postbox: PostboxImpl, ids: Set<PeerId>) {
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
}
}