mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
66 lines
2.0 KiB
Swift
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
|
|
}
|
|
}
|