From 714bcf7af36b4aaeed59cb46de6da1baaa5e4429 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Wed, 7 Feb 2024 18:57:18 +0400 Subject: [PATCH] Group boosts --- .../Telegram-iOS/en.lproj/Localizable.strings | 10 ++ submodules/PremiumUI/Resources/boost.scn | Bin 68031 -> 43534 bytes .../BoostHeaderBackgroundComponent.swift | 92 ------------------ .../Sources/BoostHeaderItem.swift | 2 +- .../Sources/ChannelStatsController.swift | 7 +- .../Sources/ChannelAppearanceScreen.swift | 10 +- .../PeerNameColorChatPreviewItem.swift | 12 ++- .../Sources/PeerNameColorScreen.swift | 2 +- .../TelegramUI/Sources/ChatController.swift | 8 +- 9 files changed, 31 insertions(+), 112 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 022093d1bb..9ef1cada19 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -11214,3 +11214,13 @@ Sorry for the inconvenience."; "GroupBoost.AdditionalFeatures" = "Additional Features"; "GroupBoost.AdditionalFeaturesText" = "By gaining **boosts**, your group reaches higher levels and unlocks more features."; + +"Stats.Boosts.Group.NoBoostersYet" = "No users currently boost your group"; +"Stats.Boosts.Group.BoostersInfo" = "Your group is currently boosted by these members."; + +"Group.Appearance.PreviewAuthor" = "Jessica"; + +"GroupBoost.Title" = "Boost Group"; +"GroupBoost.Info" = "Members of your group can **boost** it so that it **levels up** and gets **exclusive features**."; + +"Chat.GroupEmojiTooltip" = "All members of this group can\nuse the # **%@** pack"; diff --git a/submodules/PremiumUI/Resources/boost.scn b/submodules/PremiumUI/Resources/boost.scn index d8f41739bf73e8f742131f69414ad1c1ecd65a2f..d301679181d53d8a454871d9379f440cde6d6be5 100644 GIT binary patch delta 13819 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 literal 68031 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 diff --git a/submodules/PremiumUI/Sources/BoostHeaderBackgroundComponent.swift b/submodules/PremiumUI/Sources/BoostHeaderBackgroundComponent.swift index 64e5a28de4..b82af37cfd 100644 --- a/submodules/PremiumUI/Sources/BoostHeaderBackgroundComponent.swift +++ b/submodules/PremiumUI/Sources/BoostHeaderBackgroundComponent.swift @@ -75,98 +75,6 @@ public final class BoostHeaderBackgroundComponent: Component { Queue.mainQueue().justDispatch { self._ready.set(.single(true)) - self.onReady() - } - } - } - - private func onReady() { - self.playAppearanceAnimation(explode: true) - } - - - private func playAppearanceAnimation(velocity: CGFloat? = nil, smallAngle: Bool = false, mirror: Bool = false, explode: Bool = false) { - guard let scene = self.sceneView.scene else { - return - } - - let currentTime = CACurrentMediaTime() - self.previousInteractionTimestamp = currentTime - - if explode, let node = scene.rootNode.childNode(withName: "swirl", recursively: false), let particlesLeft = scene.rootNode.childNode(withName: "particles_left", recursively: false), let particlesRight = scene.rootNode.childNode(withName: "particles_right", recursively: false), let particlesBottomLeft = scene.rootNode.childNode(withName: "particles_left_bottom", recursively: false), let particlesBottomRight = scene.rootNode.childNode(withName: "particles_right_bottom", recursively: false) { - if let leftParticleSystem = particlesLeft.particleSystems?.first, let rightParticleSystem = particlesRight.particleSystems?.first, let leftBottomParticleSystem = particlesBottomLeft.particleSystems?.first, let rightBottomParticleSystem = particlesBottomRight.particleSystems?.first { - leftParticleSystem.speedFactor = 2.0 - leftParticleSystem.particleVelocity = 1.6 - leftParticleSystem.birthRate = 60.0 - leftParticleSystem.particleLifeSpan = 4.0 - - rightParticleSystem.speedFactor = 2.0 - rightParticleSystem.particleVelocity = 1.6 - rightParticleSystem.birthRate = 60.0 - rightParticleSystem.particleLifeSpan = 4.0 - -// leftBottomParticleSystem.speedFactor = 2.0 - leftBottomParticleSystem.particleVelocity = 1.6 - leftBottomParticleSystem.birthRate = 24.0 - leftBottomParticleSystem.particleLifeSpan = 7.0 - -// rightBottomParticleSystem.speedFactor = 2.0 - rightBottomParticleSystem.particleVelocity = 1.6 - rightBottomParticleSystem.birthRate = 24.0 - rightBottomParticleSystem.particleLifeSpan = 7.0 - - node.physicsField?.isActive = true - Queue.mainQueue().after(1.0) { - node.physicsField?.isActive = false - - leftParticleSystem.birthRate = 12.0 - leftParticleSystem.particleVelocity = 1.2 - leftParticleSystem.particleLifeSpan = 3.0 - - rightParticleSystem.birthRate = 12.0 - rightParticleSystem.particleVelocity = 1.2 - rightParticleSystem.particleLifeSpan = 3.0 - - leftBottomParticleSystem.particleVelocity = 1.2 - leftBottomParticleSystem.birthRate = 7.0 - leftBottomParticleSystem.particleLifeSpan = 5.0 - - rightBottomParticleSystem.particleVelocity = 1.2 - rightBottomParticleSystem.birthRate = 7.0 - rightBottomParticleSystem.particleLifeSpan = 5.0 - - let leftAnimation = POPBasicAnimation() - leftAnimation.property = (POPAnimatableProperty.property(withName: "speedFactor", initializer: { property in - property?.readBlock = { particleSystem, values in - values?.pointee = (particleSystem as! SCNParticleSystem).speedFactor - } - property?.writeBlock = { particleSystem, values in - (particleSystem as! SCNParticleSystem).speedFactor = values!.pointee - } - property?.threshold = 0.01 - }) as! POPAnimatableProperty) - leftAnimation.fromValue = 1.2 as NSNumber - leftAnimation.toValue = 0.85 as NSNumber - leftAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) - leftAnimation.duration = 0.5 - leftParticleSystem.pop_add(leftAnimation, forKey: "speedFactor") - - let rightAnimation = POPBasicAnimation() - rightAnimation.property = (POPAnimatableProperty.property(withName: "speedFactor", initializer: { property in - property?.readBlock = { particleSystem, values in - values?.pointee = (particleSystem as! SCNParticleSystem).speedFactor - } - property?.writeBlock = { particleSystem, values in - (particleSystem as! SCNParticleSystem).speedFactor = values!.pointee - } - property?.threshold = 0.01 - }) as! POPAnimatableProperty) - rightAnimation.fromValue = 1.2 as NSNumber - rightAnimation.toValue = 0.85 as NSNumber - rightAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) - rightAnimation.duration = 0.5 - rightParticleSystem.pop_add(rightAnimation, forKey: "speedFactor") - } } } } diff --git a/submodules/StatisticsUI/Sources/BoostHeaderItem.swift b/submodules/StatisticsUI/Sources/BoostHeaderItem.swift index 91568d444a..599188fa13 100644 --- a/submodules/StatisticsUI/Sources/BoostHeaderItem.swift +++ b/submodules/StatisticsUI/Sources/BoostHeaderItem.swift @@ -318,7 +318,7 @@ private final class BoostHeaderComponent: CombinedComponent { transition: context.transition ) context.add(stars - .position(CGPoint(x: size.width / 2.0, y: size.height / 2.0 + 20.0)) + .position(CGPoint(x: size.width / 2.0, y: size.height / 2.0 + 10.0)) ) let level = component.status.level diff --git a/submodules/StatisticsUI/Sources/ChannelStatsController.swift b/submodules/StatisticsUI/Sources/ChannelStatsController.swift index 3ea0eefe0f..58f0cacc9b 100644 --- a/submodules/StatisticsUI/Sources/ChannelStatsController.swift +++ b/submodules/StatisticsUI/Sources/ChannelStatsController.swift @@ -963,10 +963,10 @@ private func channelStatsControllerEntries(state: ChannelStatsControllerState, p if let boostersState, boostersState.count > 0 { boostersTitle = presentationData.strings.Stats_Boosts_Boosts(boostersState.count) boostersPlaceholder = nil - boostersFooter = isGroup ? "Your group is currently boosted by these members." : presentationData.strings.Stats_Boosts_BoostersInfo + boostersFooter = isGroup ? presentationData.strings.Stats_Boosts_Group_BoostersInfo : presentationData.strings.Stats_Boosts_BoostersInfo } else { boostersTitle = presentationData.strings.Stats_Boosts_BoostsNone - boostersPlaceholder = presentationData.strings.Stats_Boosts_NoBoostersYet + boostersPlaceholder = isGroup ? presentationData.strings.Stats_Boosts_Group_NoBoostersYet : presentationData.strings.Stats_Boosts_NoBoostersYet boostersFooter = nil } entries.append(.boostersTitle(presentationData.theme, boostersTitle)) @@ -1303,14 +1303,13 @@ public func channelStatsController(context: AccountContext, updatedPresentationD return map } - //TODO:localize var title: ItemListControllerTitle var headerItem: BoostHeaderItem? var leftNavigationButton: ItemListNavigationButton? var boostsOnly = false if isGroup, section == .boosts, let boostStatus { title = .text("") - headerItem = BoostHeaderItem(context: context, theme: presentationData.theme, strings: presentationData.strings, status: boostStatus, title: "Boost Group", text: "Members of your group can **boost** it so that it **levels up** and gets **exclusive features**.", openBoost: { + headerItem = BoostHeaderItem(context: context, theme: presentationData.theme, strings: presentationData.strings, status: boostStatus, title: presentationData.strings.GroupBoost_Title, text: presentationData.strings.GroupBoost_Info, openBoost: { openBoostImpl?(false) }, createGiveaway: { arguments.openGifts() diff --git a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift index 0e80b713f0..94564a3b1a 100644 --- a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift +++ b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift @@ -1493,7 +1493,7 @@ final class ChannelAppearanceScreenComponent: Component { photo: peer.profileImageRepresentations, nameColor: resolvedState.nameColor, backgroundEmojiId: replyFileId, - reply: (peer.compactDisplayTitle, environment.strings.Channel_Appearance_ExampleReplyText), + reply: (peer.compactDisplayTitle, environment.strings.Channel_Appearance_ExampleReplyText, resolvedState.nameColor), linkPreview: (environment.strings.Channel_Appearance_ExampleLinkWebsite, environment.strings.Channel_Appearance_ExampleLinkTitle, environment.strings.Channel_Appearance_ExampleLinkText), text: environment.strings.Channel_Appearance_ExampleText ) @@ -1624,11 +1624,11 @@ final class ChannelAppearanceScreenComponent: Component { let incomingMessageItem = PeerNameColorChatPreviewItem.MessageItem( outgoing: false, peerId: EnginePeer.Id(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(0)), - author: peer.compactDisplayTitle, - photo: peer.profileImageRepresentations, + author: environment.strings.Group_Appearance_PreviewAuthor, + photo: [], nameColor: .red, - backgroundEmojiId: nil, - reply: (environment.strings.Appearance_PreviewReplyAuthor, environment.strings.Appearance_PreviewReplyText), + backgroundEmojiId: 5301072507598550489, + reply: (environment.strings.Appearance_PreviewReplyAuthor, environment.strings.Appearance_PreviewReplyText, .violet), linkPreview: nil, text: environment.strings.Appearance_PreviewIncomingText ) diff --git a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorChatPreviewItem.swift b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorChatPreviewItem.swift index e175921398..5e6bbfb2c4 100644 --- a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorChatPreviewItem.swift +++ b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorChatPreviewItem.swift @@ -35,7 +35,7 @@ final class PeerNameColorChatPreviewItem: ListViewItem, ItemListItem, ListItemCo if lhs.backgroundEmojiId != rhs.backgroundEmojiId { return false } - if let lhsReply = lhs.reply, let rhsReply = rhs.reply, lhsReply.0 != rhsReply.0 || lhsReply.1 != rhsReply.1 { + if let lhsReply = lhs.reply, let rhsReply = rhs.reply, lhsReply.0 != rhsReply.0 || lhsReply.1 != rhsReply.1 || lhsReply.2 != rhsReply.2 { return false } else if (lhs.reply == nil) != (rhs.reply == nil) { return false @@ -57,7 +57,7 @@ final class PeerNameColorChatPreviewItem: ListViewItem, ItemListItem, ListItemCo let photo: [TelegramMediaImageRepresentation] let nameColor: PeerNameColor let backgroundEmojiId: Int64? - let reply: (String, String)? + let reply: (String, String, PeerNameColor)? let linkPreview: (String, String, String)? let text: String } @@ -220,15 +220,19 @@ final class PeerNameColorChatPreviewItemNode: ListViewItemNode { var items: [ListViewItem] = [] for messageItem in item.messageItems.reversed() { let authorPeerId = messageItem.peerId + let replyAuthorPeerId = PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(10)) var peers = SimpleDictionary() var messages = SimpleDictionary() peers[authorPeerId] = TelegramUser(id: authorPeerId, accessHash: nil, firstName: messageItem.author, lastName: "", username: nil, phone: nil, photo: messageItem.photo, botInfo: nil, restrictionInfo: nil, flags: [], emojiStatus: nil, usernames: [], storiesHidden: nil, nameColor: messageItem.nameColor, backgroundEmojiId: messageItem.backgroundEmojiId, profileColor: nil, profileBackgroundEmojiId: nil) + let replyMessageId = MessageId(peerId: peerId, namespace: 0, id: 3) - if let (_, text) = messageItem.reply { - messages[replyMessageId] = Message(stableId: 3, stableVersion: 0, id: replyMessageId, globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, threadId: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], customTags: [], forwardInfo: nil, author: peers[authorPeerId], text: text, attributes: [], media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: [], associatedMedia: [:], associatedThreadInfo: nil, associatedStories: [:]) + if let (replyAuthor, text, replyColor) = messageItem.reply { + peers[replyAuthorPeerId] = TelegramUser(id: authorPeerId, accessHash: nil, firstName: replyAuthor, lastName: "", username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [], emojiStatus: nil, usernames: [], storiesHidden: nil, nameColor: replyColor, backgroundEmojiId: messageItem.backgroundEmojiId, profileColor: nil, profileBackgroundEmojiId: nil) + + messages[replyMessageId] = Message(stableId: 3, stableVersion: 0, id: replyMessageId, globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, threadId: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], customTags: [], forwardInfo: nil, author: peers[replyAuthorPeerId], text: text, attributes: [], media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: [], associatedMedia: [:], associatedThreadInfo: nil, associatedStories: [:]) } var media: [Media] = [] diff --git a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorScreen.swift b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorScreen.swift index 8f447a4472..e227af0c81 100644 --- a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorScreen.swift +++ b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/PeerNameColorScreen.swift @@ -315,7 +315,7 @@ private func peerNameColorScreenEntries( photo: peer.profileImageRepresentations, nameColor: nameColor, backgroundEmojiId: backgroundEmojiId, - reply: (peer.compactDisplayTitle, replyText), + reply: (peer.compactDisplayTitle, replyText, nameColor), linkPreview: (presentationData.strings.NameColor_ChatPreview_LinkSite, presentationData.strings.NameColor_ChatPreview_LinkTitle, presentationData.strings.NameColor_ChatPreview_LinkText), text: messageText ) diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 4ce69173b8..b97818a131 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -15673,10 +15673,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G guard let emojiPack = (self.peerView?.cachedData as? CachedChannelData)?.emojiPack, let thumbnailFileId = emojiPack.thumbnailFileId else { return } - //TODO:localize let _ = (self.context.engine.stickers.resolveInlineStickers(fileIds: [thumbnailFileId]) - |> deliverOnMainQueue).start(next: { files in - guard let emojiFile = files.values.first else { + |> deliverOnMainQueue).start(next: { [weak self] files in + guard let self, let emojiFile = files.values.first else { return } @@ -15687,7 +15686,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return nil }) - let text = NSMutableAttributedString(attributedString: parseMarkdownIntoAttributedString("All members of this group can\nuse the # **\(emojiPack.title)** pack", attributes: markdownAttributes)) + let text = NSMutableAttributedString(attributedString: parseMarkdownIntoAttributedString(self.presentationData.strings.Chat_GroupEmojiTooltip(emojiPack.title).string, attributes: markdownAttributes)) let range = (text.string as NSString).range(of: "#") if range.location != NSNotFound { @@ -15699,7 +15698,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G account: self.context.account, sharedContext: self.context.sharedContext, text: .attributedString(text: text), -// style: .customBlur(UIColor(rgb: 0x000000, alpha: 0.8), 2.0), location: .point(rect.offsetBy(dx: 0.0, dy: -3.0), .bottom), displayDuration: .default, cornerRadius: 10.0,