From df088af2096cd303d1b30fd3333af8f222d4b262 Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Tue, 27 May 2025 21:17:05 +0800 Subject: [PATCH] Monoforums --- .../Sources/ChatListSearchListPaneNode.swift | 3 +++ .../PresentationResourcesSettings.swift | 1 + .../Sources/AsyncListComponent.swift | 12 +++++++++--- .../Sources/PeerInfoScreen.swift | 18 ++++++++---------- .../PostSuggestionsSettingsScreen.swift | 2 +- .../Contents.json | 2 +- .../bubbles_30 (1).pdf | Bin 0 -> 11918 bytes .../ic_discussion.pdf | Bin 5373 -> 0 bytes .../Resources/Animations/ChannelMessages.tgs | Bin 0 -> 7075 bytes .../Resources/Animations/LampEmoji.tgs | Bin 3835 -> 0 bytes 10 files changed, 23 insertions(+), 15 deletions(-) rename submodules/TelegramUI/Images.xcassets/Chat/Info/{PostSuggestionsIcon.imageset => ChannelMessages.imageset}/Contents.json (75%) create mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Info/ChannelMessages.imageset/bubbles_30 (1).pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Info/PostSuggestionsIcon.imageset/ic_discussion.pdf create mode 100644 submodules/TelegramUI/Resources/Animations/ChannelMessages.tgs delete mode 100644 submodules/TelegramUI/Resources/Animations/LampEmoji.tgs diff --git a/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift b/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift index 64daba37ad..92eaa12538 100644 --- a/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift @@ -145,6 +145,9 @@ private enum ChatListRecentEntry: Comparable, Identifiable { if case .secretChat = maybeChatPeer, let associatedPeerId = maybeChatPeer._asPeer().associatedPeerId, let associatedPeer = peer.peer.peers[associatedPeerId] { primaryPeer = EnginePeer(associatedPeer) chatPeer = maybeChatPeer + } else if case .channel = maybeChatPeer, let mainChannel = peer.peer.chatOrMonoforumMainPeer { + primaryPeer = EnginePeer(mainChannel) + chatPeer = maybeChatPeer } else { primaryPeer = maybeChatPeer chatPeer = maybeChatPeer diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift index aa4b951618..c94fa8ed06 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesSettings.swift @@ -85,6 +85,7 @@ public struct PresentationResourcesSettings { public static let balance = renderIcon(name: "Settings/Menu/Balance", scaleFactor: 0.97, backgroundColors: [UIColor(rgb: 0x34c759)]) public static let affiliateProgram = renderIcon(name: "Settings/Menu/AffiliateProgram") public static let earnStars = renderIcon(name: "Settings/Menu/EarnStars") + public static let channelMessages = renderIcon(name: "Chat/Info/ChannelMessages", backgroundColors: [UIColor(rgb: 0xFF9500)]) public static let premium = generateImage(CGSize(width: 29.0, height: 29.0), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) diff --git a/submodules/TelegramUI/Components/AsyncListComponent/Sources/AsyncListComponent.swift b/submodules/TelegramUI/Components/AsyncListComponent/Sources/AsyncListComponent.swift index 84052836fa..39f4764599 100644 --- a/submodules/TelegramUI/Components/AsyncListComponent/Sources/AsyncListComponent.swift +++ b/submodules/TelegramUI/Components/AsyncListComponent/Sources/AsyncListComponent.swift @@ -325,11 +325,16 @@ public final class AsyncListComponent: Component { } private final class ListItemNodeImpl: ListViewItemNode { + private let contentContainer: UIView private let contentsView = ComponentView() private(set) var item: ListItemImpl? init() { + self.contentContainer = UIView() + super.init(layerBacked: false, dynamicBounce: false, rotated: false, seeThrough: false) + + self.view.addSubview(self.contentContainer) } deinit { @@ -377,16 +382,17 @@ public final class AsyncListComponent: Component { switch item.direction { case .vertical: - self.layer.sublayerTransform = CATransform3DIdentity + self.contentContainer.layer.sublayerTransform = CATransform3DIdentity case .horizontal: - self.layer.sublayerTransform = CATransform3DMakeRotation(CGFloat.pi / 2.0, 0.0, 0.0, 1.0) + self.contentContainer.layer.sublayerTransform = CATransform3DMakeRotation(CGFloat.pi / 2.0, 0.0, 0.0, 1.0) } + self.contentContainer.frame = CGRect(origin: CGPoint(), size: mappedContentsSize) let contentsFrame = CGRect(origin: CGPoint(), size: contentsSize) if let contentsComponentView = self.contentsView.view { if contentsComponentView.superview == nil { - self.view.addSubview(contentsComponentView) + self.contentContainer.addSubview(contentsComponentView) } contentsComponentView.center = CGPoint(x: mappedContentsSize.width * 0.5, y: mappedContentsSize.height * 0.5) contentsComponentView.bounds = CGRect(origin: CGPoint(), size: contentsFrame.size) diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift index 0e207a473e..606d5edcdc 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreen.swift @@ -1033,7 +1033,7 @@ private func settingsItems(data: PeerInfoScreenData?, context: AccountContext, p } } if !isPremiumDisabled || context.isPremium { - items[.payment]!.append(PeerInfoScreenDisclosureItem(id: 103, label: .text(""), additionalBadgeLabel: presentationData.strings.Settings_New, text: presentationData.strings.Settings_Business, icon: PresentationResourcesSettings.business, action: { + items[.payment]!.append(PeerInfoScreenDisclosureItem(id: 103, label: .text(""), additionalBadgeLabel: nil, text: presentationData.strings.Settings_Business, icon: PresentationResourcesSettings.business, action: { interaction.openSettings(.businessSetup) })) } @@ -2219,7 +2219,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt interaction.editingOpenDiscussionGroupSetup() })) - items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPostSuggestionsSettings, label: .text(channel.linkedMonoforumId == nil ? presentationData.strings.PeerInfo_AllowChannelMessages_Off : presentationData.strings.PeerInfo_AllowChannelMessages_On), additionalBadgeLabel: presentationData.strings.Settings_New, text: presentationData.strings.PeerInfo_AllowChannelMessages, icon: UIImage(bundleImageName: "Chat/Info/PostSuggestionsIcon"), action: { + items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPostSuggestionsSettings, label: .text(channel.linkedMonoforumId == nil ? presentationData.strings.PeerInfo_AllowChannelMessages_Off : presentationData.strings.PeerInfo_AllowChannelMessages_On), additionalBadgeLabel: presentationData.strings.Settings_New, text: presentationData.strings.PeerInfo_AllowChannelMessages, icon: PresentationResourcesSettings.channelMessages, action: { interaction.editingOpenPostSuggestionsSetup() })) } @@ -2246,10 +2246,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt } else { label = "" } - var additionalBadgeLabel: String? = nil - if case .broadcast = channel.info { - additionalBadgeLabel = presentationData.strings.Settings_New - } + let additionalBadgeLabel: String? = nil items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemReactions, label: .text(label), additionalBadgeLabel: additionalBadgeLabel, text: presentationData.strings.PeerInfo_Reactions, icon: UIImage(bundleImageName: "Settings/Menu/Reactions"), action: { interaction.editingOpenReactionsSetup() })) @@ -2356,7 +2353,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt })) if channel.linkedMonoforumId != nil { - items[.peerAdditionalSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemChannelMessages, label: .none, text: presentationData.strings.PeerInfo_ChannelMessages, icon: UIImage(bundleImageName: "Chat/Info/RecentActionsIcon"), action: { + items[.peerAdditionalSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemChannelMessages, label: .none, text: presentationData.strings.PeerInfo_ChannelMessages, icon: PresentationResourcesSettings.channelMessages, action: { interaction.openChannelMessages() })) } @@ -2373,7 +2370,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt } if canJoinRefProgram { - items[.peerAdditionalSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemAffiliatePrograms, label: .text(""), additionalBadgeLabel: presentationData.strings.Settings_New, text: presentationData.strings.PeerInfo_ItemAffiliatePrograms_Title, icon: PresentationResourcesSettings.affiliateProgram, action: { + items[.peerAdditionalSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemAffiliatePrograms, label: .text(""), additionalBadgeLabel: nil, text: presentationData.strings.PeerInfo_ItemAffiliatePrograms_Title, icon: PresentationResourcesSettings.affiliateProgram, action: { interaction.editingOpenAffiliateProgram() })) } @@ -2529,7 +2526,8 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt if let approximateBoostLevel = channel.approximateBoostLevel, approximateBoostLevel < 1 { boostIcon = generateDisclosureActionBoostLevelBadgeImage(text: presentationData.strings.Channel_Info_BoostLevelPlusBadge("1").string) } else { - let labelText = NSAttributedString(string: presentationData.strings.Settings_New, font: Font.medium(11.0), textColor: presentationData.theme.list.itemCheckColors.foregroundColor) + boostIcon = nil + /*let labelText = NSAttributedString(string: presentationData.strings.Settings_New, font: Font.medium(11.0), textColor: presentationData.theme.list.itemCheckColors.foregroundColor) let labelBounds = labelText.boundingRect(with: CGSize(width: 100.0, height: 100.0), options: [.usesLineFragmentOrigin], context: nil) let labelSize = CGSize(width: ceil(labelBounds.width), height: ceil(labelBounds.height)) let badgeSize = CGSize(width: labelSize.width + 8.0, height: labelSize.height + 2.0 + 1.0) @@ -2545,7 +2543,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt UIGraphicsPushContext(context) labelText.draw(at: CGPoint(x: 4.0, y: 1.0 + UIScreenPixel)) UIGraphicsPopContext() - }) + })*/ } items[.peerDataSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemAppearance, label: .image(colorImage, colorImage.size), additionalBadgeIcon: boostIcon, text: presentationData.strings.Channel_Info_AppearanceItem, icon: UIImage(bundleImageName: "Chat/Info/NameColorIcon"), action: { interaction.editingOpenNameColorSetup() diff --git a/submodules/TelegramUI/Components/PeerInfo/PostSuggestionsSettingsScreen/Sources/PostSuggestionsSettingsScreen.swift b/submodules/TelegramUI/Components/PeerInfo/PostSuggestionsSettingsScreen/Sources/PostSuggestionsSettingsScreen.swift index 414dfda134..05ed5209f3 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PostSuggestionsSettingsScreen/Sources/PostSuggestionsSettingsScreen.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PostSuggestionsSettingsScreen/Sources/PostSuggestionsSettingsScreen.swift @@ -230,7 +230,7 @@ final class PostSuggestionsSettingsScreenComponent: Component { let iconSize = self.icon.update( transition: .immediate, component: AnyComponent(LottieComponent( - content: LottieComponent.AppBundleContent(name: "LampEmoji"), + content: LottieComponent.AppBundleContent(name: "ChannelMessages"), loop: false )), environment: {}, diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Info/PostSuggestionsIcon.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Chat/Info/ChannelMessages.imageset/Contents.json similarity index 75% rename from submodules/TelegramUI/Images.xcassets/Chat/Info/PostSuggestionsIcon.imageset/Contents.json rename to submodules/TelegramUI/Images.xcassets/Chat/Info/ChannelMessages.imageset/Contents.json index a88c7d45f3..97986c3294 100644 --- a/submodules/TelegramUI/Images.xcassets/Chat/Info/PostSuggestionsIcon.imageset/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Chat/Info/ChannelMessages.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "ic_discussion.pdf", + "filename" : "bubbles_30 (1).pdf", "idiom" : "universal" } ], diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Info/ChannelMessages.imageset/bubbles_30 (1).pdf b/submodules/TelegramUI/Images.xcassets/Chat/Info/ChannelMessages.imageset/bubbles_30 (1).pdf new file mode 100644 index 0000000000000000000000000000000000000000..8461becec8cdd131d8e66d7325a53b13ecb3b3b8 GIT binary patch literal 11918 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 U;s*V(dSW0^D1e(=Sw{u%FBVd%p#T5? diff --git a/submodules/TelegramUI/Resources/Animations/ChannelMessages.tgs b/submodules/TelegramUI/Resources/Animations/ChannelMessages.tgs new file mode 100644 index 0000000000000000000000000000000000000000..3a0806e1ae327429470389ba0ed9e1e464e1d282 GIT binary patch literal 7075 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 N{{wloPVZ&=006|l#rpsN literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/Resources/Animations/LampEmoji.tgs b/submodules/TelegramUI/Resources/Animations/LampEmoji.tgs deleted file mode 100644 index e3c35414ad18b7cbbe33eb0d7838132a46d7b347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3835 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 xJY-B_p;}Vy=)M2B=rZH9VF2|Q9