Swiftgram/submodules/Postbox/Sources/TimestampBasedMessageAttributesView.swift

55 lines
1.9 KiB
Swift

import Foundation
final class MutableTimestampBasedMessageAttributesView {
let tag: UInt16
var head: TimestampBasedMessageAttributesEntry?
init(postbox: PostboxImpl, tag: UInt16) {
self.tag = tag
self.head = postbox.timestampBasedMessageAttributesTable.head(tag: tag)
postboxLog("MutableTimestampBasedMessageAttributesView: tag: \(tag) head: \(String(describing: self.head))")
}
func replay(postbox: PostboxImpl, operations: [TimestampBasedMessageAttributesOperation]) -> Bool {
var updated = false
var invalidatedHead = false
for operation in operations {
switch operation {
case let .add(entry):
if entry.tag == self.tag {
if let head = self.head {
if entry.index < head.index {
self.head = entry
updated = true
}
} else {
self.head = entry
updated = true
}
}
case let .remove(entry):
if entry.tag == self.tag {
if let head = self.head, head.messageId == entry.messageId {
self.head = nil
updated = true
invalidatedHead = true
}
}
}
}
if invalidatedHead {
self.head = postbox.timestampBasedMessageAttributesTable.head(tag: self.tag)
}
return updated
}
}
public final class TimestampBasedMessageAttributesView {
public let head: TimestampBasedMessageAttributesEntry?
init(_ view: MutableTimestampBasedMessageAttributesView) {
self.head = view.head
}
}