mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
[WIP] Stars reactions
This commit is contained in:
@@ -5,7 +5,10 @@ import TelegramApi
|
||||
extension ReactionsMessageAttribute {
|
||||
func withUpdatedResults(_ reactions: Api.MessageReactions) -> ReactionsMessageAttribute {
|
||||
switch reactions {
|
||||
case let .messageReactions(flags, results, recentReactions):
|
||||
case let .messageReactions(flags, results, recentReactions, topReactors):
|
||||
//TODO:release
|
||||
let _ = topReactors
|
||||
|
||||
let min = (flags & (1 << 0)) != 0
|
||||
let canViewList = (flags & (1 << 2)) != 0
|
||||
let isTags = (flags & (1 << 3)) != 0
|
||||
@@ -94,26 +97,7 @@ public func mergedMessageReactionsAndPeers(accountPeerId: EnginePeer.Id, account
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
var reactions = attribute.reactions
|
||||
if "".isEmpty {
|
||||
if let index = reactions.firstIndex(where: {
|
||||
if case .custom(MessageReaction.starsReactionId) = $0.value {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}) {
|
||||
let value = reactions[index]
|
||||
reactions.remove(at: index)
|
||||
reactions.insert(value, at: 0)
|
||||
} else {
|
||||
reactions.insert(MessageReaction(value: .custom(MessageReaction.starsReactionId), count: 1000000, chosenOrder: nil), at: 0)
|
||||
}
|
||||
}
|
||||
#else
|
||||
let reactions = attribute.reactions
|
||||
#endif
|
||||
|
||||
return (reactions, recentPeers)
|
||||
}
|
||||
@@ -174,14 +158,18 @@ private func mergeReactions(reactions: [MessageReaction], recentPeers: [Reaction
|
||||
public func mergedMessageReactions(attributes: [MessageAttribute], isTags: Bool) -> ReactionsMessageAttribute? {
|
||||
var current: ReactionsMessageAttribute?
|
||||
var pending: PendingReactionsMessageAttribute?
|
||||
var pendingStars: PendingStarsReactionsMessageAttribute?
|
||||
for attribute in attributes {
|
||||
if let attribute = attribute as? ReactionsMessageAttribute {
|
||||
current = attribute
|
||||
} else if let attribute = attribute as? PendingReactionsMessageAttribute {
|
||||
pending = attribute
|
||||
} else if let attribute = attribute as? PendingStarsReactionsMessageAttribute {
|
||||
pendingStars = attribute
|
||||
}
|
||||
}
|
||||
|
||||
let result: ReactionsMessageAttribute?
|
||||
if let pending = pending, let accountPeerId = pending.accountPeerId {
|
||||
var reactions = current?.reactions ?? []
|
||||
var recentPeers = current?.recentPeers ?? []
|
||||
@@ -191,21 +179,40 @@ public func mergedMessageReactions(attributes: [MessageAttribute], isTags: Bool)
|
||||
recentPeers = updatedRecentPeers
|
||||
|
||||
if !reactions.isEmpty {
|
||||
return ReactionsMessageAttribute(canViewList: current?.canViewList ?? false, isTags: current?.isTags ?? isTags, reactions: reactions, recentPeers: recentPeers)
|
||||
result = ReactionsMessageAttribute(canViewList: current?.canViewList ?? false, isTags: current?.isTags ?? isTags, reactions: reactions, recentPeers: recentPeers)
|
||||
} else {
|
||||
return nil
|
||||
result = nil
|
||||
}
|
||||
} else if let current = current {
|
||||
return current
|
||||
} else if let current {
|
||||
result = current
|
||||
} else {
|
||||
return nil
|
||||
result = nil
|
||||
}
|
||||
|
||||
if let pendingStars {
|
||||
if let result {
|
||||
var reactions = result.reactions
|
||||
var updatedCount: Int32 = pendingStars.count
|
||||
if let index = reactions.firstIndex(where: { $0.value == .stars }) {
|
||||
updatedCount += reactions[index].count
|
||||
reactions.remove(at: index)
|
||||
}
|
||||
reactions.insert(MessageReaction(value: .stars, count: updatedCount, chosenOrder: -1), at: 0)
|
||||
return ReactionsMessageAttribute(canViewList: current?.canViewList ?? false, isTags: current?.isTags ?? isTags, reactions: reactions, recentPeers: result.recentPeers)
|
||||
} else {
|
||||
return ReactionsMessageAttribute(canViewList: current?.canViewList ?? false, isTags: current?.isTags ?? isTags, reactions: [MessageReaction(value: .stars, count: pendingStars.count, chosenOrder: -1)], recentPeers: [])
|
||||
}
|
||||
} else {
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
extension ReactionsMessageAttribute {
|
||||
convenience init(apiReactions: Api.MessageReactions) {
|
||||
switch apiReactions {
|
||||
case let .messageReactions(flags, results, recentReactions):
|
||||
case let .messageReactions(flags, results, recentReactions, topReactors):
|
||||
//TODO:release
|
||||
let _ = topReactors
|
||||
let canViewList = (flags & (1 << 2)) != 0
|
||||
let isTags = (flags & (1 << 3)) != 0
|
||||
let parsedRecentReactions: [ReactionsMessageAttribute.RecentPeer]
|
||||
|
||||
Reference in New Issue
Block a user