mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
Initial reply stats implementation
This commit is contained in:
@@ -3,23 +3,53 @@ import Postbox
|
||||
|
||||
public class ReplyMessageAttribute: MessageAttribute {
|
||||
public let messageId: MessageId
|
||||
public let threadMessageId: MessageId?
|
||||
|
||||
public var associatedMessageIds: [MessageId] {
|
||||
return [self.messageId]
|
||||
}
|
||||
|
||||
public init(messageId: MessageId) {
|
||||
public init(messageId: MessageId, threadMessageId: MessageId?) {
|
||||
self.messageId = messageId
|
||||
self.threadMessageId = threadMessageId
|
||||
}
|
||||
|
||||
required public init(decoder: PostboxDecoder) {
|
||||
let namespaceAndId: Int64 = decoder.decodeInt64ForKey("i", orElse: 0)
|
||||
self.messageId = MessageId(peerId: PeerId(decoder.decodeInt64ForKey("p", orElse: 0)), namespace: Int32(namespaceAndId & 0xffffffff), id: Int32((namespaceAndId >> 32) & 0xffffffff))
|
||||
|
||||
if let threadNamespaceAndId = decoder.decodeOptionalInt64ForKey("ti"), let threadPeerId = decoder.decodeOptionalInt64ForKey("tp") {
|
||||
self.threadMessageId = MessageId(peerId: PeerId(threadPeerId), namespace: Int32(threadNamespaceAndId & 0xffffffff), id: Int32((threadNamespaceAndId >> 32) & 0xffffffff))
|
||||
} else {
|
||||
self.threadMessageId = nil
|
||||
}
|
||||
}
|
||||
|
||||
public func encode(_ encoder: PostboxEncoder) {
|
||||
let namespaceAndId = Int64(self.messageId.namespace) | (Int64(self.messageId.id) << 32)
|
||||
encoder.encodeInt64(namespaceAndId, forKey: "i")
|
||||
encoder.encodeInt64(self.messageId.peerId.toInt64(), forKey: "p")
|
||||
if let threadMessageId = self.threadMessageId {
|
||||
let threadNamespaceAndId = Int64(threadMessageId.namespace) | (Int64(threadMessageId.id) << 32)
|
||||
encoder.encodeInt64(threadNamespaceAndId, forKey: "ti")
|
||||
encoder.encodeInt64(threadMessageId.peerId.toInt64(), forKey: "tp")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public extension ReplyMessageAttribute {
|
||||
var effectiveReplyThreadMessageId: MessageId {
|
||||
return self.threadMessageId ?? self.messageId
|
||||
}
|
||||
}
|
||||
|
||||
public extension Message {
|
||||
var effectiveReplyThreadMessageId: MessageId? {
|
||||
for attribute in self.attributes {
|
||||
if let attribute = attribute as? ReplyMessageAttribute {
|
||||
return attribute.effectiveReplyThreadMessageId
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user