Skip to content

Commit b625243

Browse files
author
Isaac
committed
Various improvements
1 parent c6946cc commit b625243

File tree

23 files changed

+299
-191
lines changed

23 files changed

+299
-191
lines changed

submodules/AccountContext/Sources/ChatController.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public final class ChatMessageItemAssociatedData: Equatable {
4848
public let availableMessageEffects: AvailableMessageEffects?
4949
public let savedMessageTags: SavedMessageTags?
5050
public let defaultReaction: MessageReaction.Reaction?
51+
public let areStarReactionsEnabled: Bool
5152
public let isPremium: Bool
5253
public let forceInlineReactions: Bool
5354
public let alwaysDisplayTranscribeButton: DisplayTranscribeButton
@@ -83,6 +84,7 @@ public final class ChatMessageItemAssociatedData: Equatable {
8384
availableMessageEffects: AvailableMessageEffects?,
8485
savedMessageTags: SavedMessageTags?,
8586
defaultReaction: MessageReaction.Reaction?,
87+
areStarReactionsEnabled: Bool,
8688
isPremium: Bool,
8789
accountPeer: EnginePeer?,
8890
forceInlineReactions: Bool = false,
@@ -117,6 +119,7 @@ public final class ChatMessageItemAssociatedData: Equatable {
117119
self.availableMessageEffects = availableMessageEffects
118120
self.savedMessageTags = savedMessageTags
119121
self.defaultReaction = defaultReaction
122+
self.areStarReactionsEnabled = areStarReactionsEnabled
120123
self.isPremium = isPremium
121124
self.accountPeer = accountPeer
122125
self.forceInlineReactions = forceInlineReactions

submodules/Components/ReactionButtonListComponent/Sources/ReactionButtonListComponent.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -842,11 +842,13 @@ public final class ReactionButtonAsyncNode: ContextControllerSourceView {
842842
let compactString = countString(Int64(spec.component.count))
843843
#endif
844844

845-
for character in compactString {
846-
counterComponents.append(String(character))
847-
}
848-
for character in "\(spec.component.count)" {
849-
extractedCounterComponents.append(String(character))
845+
if spec.component.count != 0 {
846+
for character in compactString {
847+
counterComponents.append(String(character))
848+
}
849+
for character in "\(spec.component.count)" {
850+
extractedCounterComponents.append(String(character))
851+
}
850852
}
851853
}
852854

submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,7 @@ public class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
11031103
reactionPeers: dateReactionsAndPeers.peers,
11041104
displayAllReactionPeers: item.message.id.peerId.namespace == Namespaces.Peer.CloudUser,
11051105
areReactionsTags: item.message.areReactionsTags(accountPeerId: item.context.account.peerId),
1106+
areStarReactionsEnabled: item.associatedData.areStarReactionsEnabled,
11061107
messageEffect: messageEffect,
11071108
replyCount: dateReplies,
11081109
starsCount: starsCount,

submodules/TelegramUI/Components/Chat/ChatMessageAttachedContentNode/Sources/ChatMessageAttachedContentNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
748748
reactionPeers: dateReactionsAndPeers.peers,
749749
displayAllReactionPeers: message.id.peerId.namespace == Namespaces.Peer.CloudUser,
750750
areReactionsTags: message.areReactionsTags(accountPeerId: context.account.peerId),
751+
areStarReactionsEnabled: associatedData.areStarReactionsEnabled,
751752
messageEffect: message.messageEffect(availableMessageEffects: associatedData.availableMessageEffects),
752753
replyCount: dateReplies,
753754
starsCount: starsCount,

submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2405,6 +2405,7 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
24052405
reactionPeers: dateReactionsAndPeers.peers,
24062406
displayAllReactionPeers: item.message.id.peerId.namespace == Namespaces.Peer.CloudUser,
24072407
areReactionsTags: item.message.areReactionsTags(accountPeerId: item.context.account.peerId),
2408+
areStarReactionsEnabled: item.associatedData.areStarReactionsEnabled,
24082409
messageEffect: item.message.messageEffect(availableMessageEffects: item.associatedData.availableMessageEffects),
24092410
replyCount: dateReplies,
24102411
starsCount: starsCount,

submodules/TelegramUI/Components/Chat/ChatMessageContactBubbleContentNode/Sources/ChatMessageContactBubbleContentNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ public class ChatMessageContactBubbleContentNode: ChatMessageBubbleContentNode {
301301
reactionPeers: dateReactionsAndPeers.peers,
302302
displayAllReactionPeers: item.message.id.peerId.namespace == Namespaces.Peer.CloudUser,
303303
areReactionsTags: item.topMessage.areReactionsTags(accountPeerId: item.context.account.peerId),
304+
areStarReactionsEnabled: item.associatedData.areStarReactionsEnabled,
304305
messageEffect: messageEffect,
305306
replyCount: dateReplies,
306307
starsCount: starsCount,

submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/Sources/ChatMessageDateAndStatusNode.swift

Lines changed: 88 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ public class ChatMessageDateAndStatusNode: ASDisplayNode {
193193
var reactionPeers: [(MessageReaction.Reaction, EnginePeer)]
194194
var displayAllReactionPeers: Bool
195195
var areReactionsTags: Bool
196+
var areStarReactionsEnabled: Bool
196197
var messageEffect: AvailableMessageEffects.MessageEffect?
197198
var replyCount: Int
198199
var starsCount: Int64?
@@ -217,6 +218,7 @@ public class ChatMessageDateAndStatusNode: ASDisplayNode {
217218
reactionPeers: [(MessageReaction.Reaction, EnginePeer)],
218219
displayAllReactionPeers: Bool,
219220
areReactionsTags: Bool,
221+
areStarReactionsEnabled: Bool,
220222
messageEffect: AvailableMessageEffects.MessageEffect?,
221223
replyCount: Int,
222224
starsCount: Int64?,
@@ -240,6 +242,7 @@ public class ChatMessageDateAndStatusNode: ASDisplayNode {
240242
self.reactionPeers = reactionPeers
241243
self.displayAllReactionPeers = displayAllReactionPeers
242244
self.areReactionsTags = areReactionsTags
245+
self.areStarReactionsEnabled = areStarReactionsEnabled
243246
self.messageEffect = messageEffect
244247
self.replyCount = replyCount
245248
self.starsCount = starsCount
@@ -775,67 +778,101 @@ public class ChatMessageDateAndStatusNode: ASDisplayNode {
775778
totalReactionCount += Int(reaction.count)
776779
}
777780

778-
reactionButtonsResult = reactionButtonsContainer.update(
779-
context: arguments.context,
780-
action: { itemNode, value, sourceView in
781-
guard let strongSelf = self else {
782-
return
783-
}
784-
strongSelf.reactionSelected?(itemNode, value, sourceView)
785-
},
786-
reactions: arguments.reactions.map { reaction in
787-
var centerAnimation: TelegramMediaFile?
788-
var animationFileId: Int64?
789-
790-
switch reaction.value {
791-
case .builtin, .stars:
792-
if let availableReactions = arguments.availableReactions {
793-
for availableReaction in availableReactions.reactions {
794-
if availableReaction.value == reaction.value {
795-
centerAnimation = availableReaction.centerAnimation?._parse()
796-
break
797-
}
781+
var hadStars = false
782+
var mappedReactions = arguments.reactions.map { reaction in
783+
var centerAnimation: TelegramMediaFile?
784+
var animationFileId: Int64?
785+
786+
if case .stars = reaction.value {
787+
hadStars = true
788+
}
789+
790+
switch reaction.value {
791+
case .builtin, .stars:
792+
if let availableReactions = arguments.availableReactions {
793+
for availableReaction in availableReactions.reactions {
794+
if availableReaction.value == reaction.value {
795+
centerAnimation = availableReaction.centerAnimation?._parse()
796+
break
798797
}
799798
}
800-
case let .custom(fileId):
801-
animationFileId = fileId
802799
}
803-
804-
var peers: [EnginePeer] = []
805-
for (value, peer) in arguments.reactionPeers {
806-
if value == reaction.value {
807-
if !peers.contains(where: { $0.id == peer.id }) {
808-
peers.append(peer)
809-
}
800+
case let .custom(fileId):
801+
animationFileId = fileId
802+
}
803+
804+
var peers: [EnginePeer] = []
805+
for (value, peer) in arguments.reactionPeers {
806+
if value == reaction.value {
807+
if !peers.contains(where: { $0.id == peer.id }) {
808+
peers.append(peer)
810809
}
811810
}
812-
if !arguments.displayAllReactionPeers {
813-
if peers.count != Int(reaction.count) || arguments.reactionPeers.count != totalReactionCount {
814-
peers.removeAll()
811+
}
812+
if !arguments.displayAllReactionPeers {
813+
if peers.count != Int(reaction.count) || arguments.reactionPeers.count != totalReactionCount {
814+
peers.removeAll()
815+
}
816+
}
817+
818+
var title: String?
819+
if arguments.areReactionsTags, let savedMessageTags = arguments.savedMessageTags {
820+
for tag in savedMessageTags.tags {
821+
if tag.reaction == reaction.value {
822+
title = tag.title
815823
}
816824
}
817-
818-
var title: String?
819-
if arguments.areReactionsTags, let savedMessageTags = arguments.savedMessageTags {
820-
for tag in savedMessageTags.tags {
821-
if tag.reaction == reaction.value {
822-
title = tag.title
823-
}
825+
}
826+
827+
return ReactionButtonsAsyncLayoutContainer.Reaction(
828+
reaction: ReactionButtonComponent.Reaction(
829+
value: reaction.value,
830+
centerAnimation: centerAnimation,
831+
animationFileId: animationFileId,
832+
title: title
833+
),
834+
count: Int(reaction.count),
835+
peers: arguments.areReactionsTags ? [] : peers,
836+
chosenOrder: reaction.chosenOrder
837+
)
838+
}
839+
840+
//TODO:localize
841+
if arguments.areStarReactionsEnabled && !hadStars && !mappedReactions.isEmpty {
842+
var centerAnimation: TelegramMediaFile?
843+
let animationFileId: Int64? = nil
844+
845+
if let availableReactions = arguments.availableReactions {
846+
for availableReaction in availableReactions.reactions {
847+
if availableReaction.value == .stars {
848+
centerAnimation = availableReaction.centerAnimation?._parse()
849+
break
824850
}
825851
}
826-
827-
return ReactionButtonsAsyncLayoutContainer.Reaction(
828-
reaction: ReactionButtonComponent.Reaction(
829-
value: reaction.value,
830-
centerAnimation: centerAnimation,
831-
animationFileId: animationFileId,
832-
title: title
833-
),
834-
count: Int(reaction.count),
835-
peers: arguments.areReactionsTags ? [] : peers,
836-
chosenOrder: reaction.chosenOrder
837-
)
852+
}
853+
854+
mappedReactions.insert(ReactionButtonsAsyncLayoutContainer.Reaction(
855+
reaction: ReactionButtonComponent.Reaction(
856+
value: .stars,
857+
centerAnimation: centerAnimation,
858+
animationFileId: animationFileId,
859+
title: nil
860+
),
861+
count: 0,
862+
peers: [],
863+
chosenOrder: nil
864+
), at: 0)
865+
}
866+
867+
reactionButtonsResult = reactionButtonsContainer.update(
868+
context: arguments.context,
869+
action: { itemNode, value, sourceView in
870+
guard let strongSelf = self else {
871+
return
872+
}
873+
strongSelf.reactionSelected?(itemNode, value, sourceView)
838874
},
875+
reactions: mappedReactions,
839876
colors: reactionColors,
840877
isTag: arguments.areReactionsTags,
841878
constrainedWidth: arguments.constrainedSize.width

submodules/TelegramUI/Components/Chat/ChatMessageFactCheckBubbleContentNode/Sources/ChatMessageFactCheckBubbleContentNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ public class ChatMessageFactCheckBubbleContentNode: ChatMessageBubbleContentNode
448448
reactionPeers: dateReactionsAndPeers.peers,
449449
displayAllReactionPeers: item.message.id.peerId.namespace == Namespaces.Peer.CloudUser,
450450
areReactionsTags: item.topMessage.areReactionsTags(accountPeerId: item.context.account.peerId),
451+
areStarReactionsEnabled: item.associatedData.areStarReactionsEnabled,
451452
messageEffect: item.topMessage.messageEffect(availableMessageEffects: item.associatedData.availableMessageEffects),
452453
replyCount: dateReplies,
453454
starsCount: starsCount,

submodules/TelegramUI/Components/Chat/ChatMessageGiveawayBubbleContentNode/Sources/ChatMessageGiveawayBubbleContentNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ public class ChatMessageGiveawayBubbleContentNode: ChatMessageBubbleContentNode,
576576
reactionPeers: dateReactionsAndPeers.peers,
577577
displayAllReactionPeers: item.message.id.peerId.namespace == Namespaces.Peer.CloudUser,
578578
areReactionsTags: item.topMessage.areReactionsTags(accountPeerId: item.context.account.peerId),
579+
areStarReactionsEnabled: item.associatedData.areStarReactionsEnabled,
579580
messageEffect: item.topMessage.messageEffect(availableMessageEffects: item.associatedData.availableMessageEffects),
580581
replyCount: dateReplies,
581582
starsCount: nil,

submodules/TelegramUI/Components/Chat/ChatMessageInteractiveFileNode/Sources/ChatMessageInteractiveFileNode.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,7 @@ public final class ChatMessageInteractiveFileNode: ASDisplayNode {
957957
reactionPeers: dateReactionsAndPeers.peers,
958958
displayAllReactionPeers: arguments.message.id.peerId.namespace == Namespaces.Peer.CloudUser,
959959
areReactionsTags: arguments.message.areReactionsTags(accountPeerId: arguments.context.account.peerId),
960+
areStarReactionsEnabled: arguments.associatedData.areStarReactionsEnabled,
960961
messageEffect: arguments.message.messageEffect(availableMessageEffects: arguments.associatedData.availableMessageEffects),
961962
replyCount: dateReplies,
962963
starsCount: starsCount,

0 commit comments

Comments
 (0)