diff --git a/submodules/TelegramCore/Sources/ApiUtils/ReactionsMessageAttribute.swift b/submodules/TelegramCore/Sources/ApiUtils/ReactionsMessageAttribute.swift index e54dd99a12..2b341e349e 100644 --- a/submodules/TelegramCore/Sources/ApiUtils/ReactionsMessageAttribute.swift +++ b/submodules/TelegramCore/Sources/ApiUtils/ReactionsMessageAttribute.swift @@ -25,8 +25,9 @@ extension ReactionsMessageAttribute { case let .messagePeerReaction(flags, peerId, date, reaction): let isLarge = (flags & (1 << 0)) != 0 let isUnseen = (flags & (1 << 1)) != 0 + let isMy = (flags & (1 << 2)) != 0 if let reaction = MessageReaction.Reaction(apiReaction: reaction) { - return ReactionsMessageAttribute.RecentPeer(value: reaction, isLarge: isLarge, isUnseen: isUnseen, peerId: peerId.peerId, timestamp: date) + return ReactionsMessageAttribute.RecentPeer(value: reaction, isLarge: isLarge, isUnseen: isUnseen, isMy: isMy, peerId: peerId.peerId, timestamp: date) } else { return nil } @@ -117,17 +118,17 @@ private func mergeReactions(reactions: [MessageReaction], recentPeers: [Reaction let pendingReactionSendAsPeerId = pendingReaction.sendAsPeerId ?? accountPeerId if let index = recentPeers.firstIndex(where: { - $0.value == pendingReaction.value && $0.peerId == pendingReactionSendAsPeerId + $0.value == pendingReaction.value && ($0.peerId == pendingReactionSendAsPeerId || $0.isMy) }) { recentPeers.remove(at: index) } - recentPeers.append(ReactionsMessageAttribute.RecentPeer(value: pendingReaction.value, isLarge: false, isUnseen: false, peerId: pendingReactionSendAsPeerId, timestamp: Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970))) + recentPeers.append(ReactionsMessageAttribute.RecentPeer(value: pendingReaction.value, isLarge: false, isUnseen: false, isMy: true, peerId: pendingReactionSendAsPeerId, timestamp: Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970))) } for i in (0 ..< result.count).reversed() { if result[i].chosenOrder != nil { if !pending.contains(where: { $0.value == result[i].value }) { - if let index = recentPeers.firstIndex(where: { $0.value == result[i].value && $0.peerId == accountPeerId }) { + if let index = recentPeers.firstIndex(where: { $0.value == result[i].value && ($0.peerId == accountPeerId || $0.isMy) }) { recentPeers.remove(at: index) } @@ -191,8 +192,9 @@ extension ReactionsMessageAttribute { case let .messagePeerReaction(flags, peerId, date, reaction): let isLarge = (flags & (1 << 0)) != 0 let isUnseen = (flags & (1 << 1)) != 0 + let isMy = (flags & (1 << 2)) != 0 if let reaction = MessageReaction.Reaction(apiReaction: reaction) { - return ReactionsMessageAttribute.RecentPeer(value: reaction, isLarge: isLarge, isUnseen: isUnseen, peerId: peerId.peerId, timestamp: date) + return ReactionsMessageAttribute.RecentPeer(value: reaction, isLarge: isLarge, isUnseen: isUnseen, isMy: isMy, peerId: peerId.peerId, timestamp: date) } else { return nil } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_ReactionsMessageAttribute.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_ReactionsMessageAttribute.swift index e8fcb4bf9e..aa7e0e99de 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_ReactionsMessageAttribute.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_ReactionsMessageAttribute.swift @@ -118,13 +118,15 @@ public final class ReactionsMessageAttribute: Equatable, MessageAttribute { public var value: MessageReaction.Reaction public var isLarge: Bool public var isUnseen: Bool + public var isMy: Bool public var peerId: PeerId public var timestamp: Int32? - public init(value: MessageReaction.Reaction, isLarge: Bool, isUnseen: Bool, peerId: PeerId, timestamp: Int32?) { + public init(value: MessageReaction.Reaction, isLarge: Bool, isUnseen: Bool, isMy: Bool, peerId: PeerId, timestamp: Int32?) { self.value = value self.isLarge = isLarge self.isUnseen = isUnseen + self.isMy = isMy self.peerId = peerId self.timestamp = timestamp } @@ -137,6 +139,7 @@ public final class ReactionsMessageAttribute: Equatable, MessageAttribute { } self.isLarge = decoder.decodeInt32ForKey("l", orElse: 0) != 0 self.isUnseen = decoder.decodeInt32ForKey("u", orElse: 0) != 0 + self.isMy = decoder.decodeInt32ForKey("my", orElse: 0) != 0 self.peerId = PeerId(decoder.decodeInt64ForKey("p", orElse: 0)) self.timestamp = decoder.decodeOptionalInt32ForKey("ts") } @@ -150,6 +153,7 @@ public final class ReactionsMessageAttribute: Equatable, MessageAttribute { } encoder.encodeInt32(self.isLarge ? 1 : 0, forKey: "l") encoder.encodeInt32(self.isUnseen ? 1 : 0, forKey: "u") + encoder.encodeInt32(self.isMy ? 1 : 0, forKey: "my") encoder.encodeInt64(self.peerId.toInt64(), forKey: "p") if let timestamp = self.timestamp { encoder.encodeInt32(timestamp, forKey: "ts")