Swiftgram/submodules/Postbox/Sources/MessageGroupView.swift
2022-05-26 23:11:44 +04:00

66 lines
2.0 KiB
Swift

import Foundation
final class MutableMessageGroupView: MutablePostboxView {
fileprivate let id: MessageId
fileprivate let groupingKey: Int64?
fileprivate var messages: [Message] = []
init(postbox: PostboxImpl, id: MessageId) {
self.id = id
self.messages = postbox.getMessageGroup(at: id) ?? []
self.groupingKey = self.messages.first?.groupingKey
}
func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool {
var updated = false
if let operations = transaction.currentOperationsByPeerId[self.id.peerId] {
outer: for operation in operations {
switch operation {
case let .InsertMessage(message):
if let groupingKey = self.groupingKey, message.groupingKey == groupingKey {
updated = true
break outer
} else if message.id == self.id {
updated = true
break outer
}
case let .Remove(indices):
for index in indices {
for message in self.messages {
if index.0.id == message.id {
updated = true
break outer
}
}
}
default:
break
}
}
}
if updated {
self.messages = postbox.getMessageGroup(at: self.id) ?? []
return true
} else {
return false
}
}
func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool {
return false
}
func immutableView() -> PostboxView {
return MessageGroupView(self)
}
}
public final class MessageGroupView: PostboxView {
public let messages: [Message]
init(_ view: MutableMessageGroupView) {
self.messages = view.messages
}
}