From 85ac817816cb8ed5afdd3314aea99ee19cc325f5 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Sun, 16 Oct 2022 18:06:05 +0300 Subject: [PATCH] Additional links in admin log --- .../Telegram-iOS/en.lproj/Localizable.strings | 4 ++ ...ssageEventLogPreviousLinkContentNode.swift | 2 +- .../ChatRecentActionsHistoryTransition.swift | 39 ++++++++++++++----- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 2754050702..f09b8368f3 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -8138,3 +8138,7 @@ Sorry for the inconvenience."; "ChatListFolderSettings.SubscribeToMoveAll" = "Subscribe to **Telegram Premium** to move the \"All Chats\" folder."; "ChatListFolderSettings.SubscribeToMoveAllAction" = "More"; + +"Channel.AdminLog.MessageChangedGroupUsernames" = "%@ changed group links:"; +"Channel.AdminLog.MessageChangedChannelUsernames" = "%@ changed channel links:"; +"Channel.AdminLog.MessagePreviousLinks" = "Previous links"; diff --git a/submodules/TelegramUI/Sources/ChatMessageEventLogPreviousLinkContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageEventLogPreviousLinkContentNode.swift index facb0a018e..ae07c01bba 100644 --- a/submodules/TelegramUI/Sources/ChatMessageEventLogPreviousLinkContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageEventLogPreviousLinkContentNode.swift @@ -40,7 +40,7 @@ final class ChatMessageEventLogPreviousLinkContentNode: ChatMessageBubbleContent } } - let title: String = item.presentationData.strings.Channel_AdminLog_MessagePreviousLink + let title: String = item.message.text.contains("\n") ? item.presentationData.strings.Channel_AdminLog_MessagePreviousLinks : item.presentationData.strings.Channel_AdminLog_MessagePreviousLink let text: String = item.message.text let mediaAndFlags: (Media, ChatMessageAttachedContentNodeMediaFlags)? = nil diff --git a/submodules/TelegramUI/Sources/ChatRecentActionsHistoryTransition.swift b/submodules/TelegramUI/Sources/ChatRecentActionsHistoryTransition.swift index 8394b9ac7e..da5ccba729 100644 --- a/submodules/TelegramUI/Sources/ChatRecentActionsHistoryTransition.swift +++ b/submodules/TelegramUI/Sources/ChatRecentActionsHistoryTransition.swift @@ -31,7 +31,7 @@ struct ChatRecentActionsEntryId: Hashable, Comparable { private func eventNeedsHeader(_ event: AdminLogEvent) -> Bool { switch event.action { - case .changeAbout, .changeUsername, .editMessage, .deleteMessage, .pollStopped, .sendMessage: + case .changeAbout, .changeUsername, .changeUsernames, .editMessage, .deleteMessage, .pollStopped, .sendMessage: return true case let .updatePinned(message): if message != nil { @@ -217,14 +217,14 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { var text: String = "" var entities: [MessageTextEntity] = [] if let peer = peer as? TelegramChannel, case .broadcast = peer.info { - appendAttributedText(text: self.presentationData.strings.Channel_AdminLog_MessageChangedChannelUsername(author.flatMap(EnginePeer.init)?.displayTitle(strings: self.presentationData.strings, displayOrder: self.presentationData.nameDisplayOrder) ?? ""), generateEntities: { index in + appendAttributedText(text: self.presentationData.strings.Channel_AdminLog_MessageChangedChannelUsernames(author.flatMap(EnginePeer.init)?.displayTitle(strings: self.presentationData.strings, displayOrder: self.presentationData.nameDisplayOrder) ?? ""), generateEntities: { index in if index == 0, let author = author { return [.TextMention(peerId: author.id)] } return [] }, to: &text, entities: &entities) } else { - appendAttributedText(text: self.presentationData.strings.Channel_AdminLog_MessageChangedGroupUsername(author.flatMap(EnginePeer.init)?.displayTitle(strings: self.presentationData.strings, displayOrder: self.presentationData.nameDisplayOrder) ?? ""), generateEntities: { index in + appendAttributedText(text: self.presentationData.strings.Channel_AdminLog_MessageChangedGroupUsernames(author.flatMap(EnginePeer.init)?.displayTitle(strings: self.presentationData.strings, displayOrder: self.presentationData.nameDisplayOrder) ?? ""), generateEntities: { index in if index == 0, let author = author { return [.TextMention(peerId: author.id)] } @@ -237,14 +237,33 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { case .content: var previousAttributes: [MessageAttribute] = [] var attributes: [MessageAttribute] = [] - - let prevText = "https://t.me/\(prev.first ?? "")" - previousAttributes.append(TextEntitiesMessageAttribute(entities: [MessageTextEntity(range: 0 ..< prevText.count, type: .Url)])) - - let text: String + + var prevTextEntities: [MessageTextEntity] = [] + var textEntities: [MessageTextEntity] = [] + + var prevText: String = "" + for username in prev { + let link = "https://t.me/\(username)" + prevTextEntities.append(MessageTextEntity(range: prevText.count ..< prevText.count + link.count, type: .Url)) + prevText.append(link) + prevText.append("\n") + } + prevText.removeLast() + if !prevTextEntities.isEmpty { + previousAttributes.append(TextEntitiesMessageAttribute(entities: prevTextEntities)) + } + var text: String = "" if !new.isEmpty { - text = "https://t.me/\(new.first ?? "")" - attributes.append(TextEntitiesMessageAttribute(entities: [MessageTextEntity(range: 0 ..< text.count, type: .Url)])) + for username in new { + let link = "https://t.me/\(username)" + textEntities.append(MessageTextEntity(range: text.count ..< text.count + link.count, type: .Url)) + text.append(link) + text.append("\n") + } + text.removeLast() + if !textEntities.isEmpty { + attributes.append(TextEntitiesMessageAttribute(entities: prevTextEntities)) + } } else { text = self.presentationData.strings.Channel_AdminLog_EmptyMessageText attributes.append(TextEntitiesMessageAttribute(entities: [MessageTextEntity(range: 0 ..< text.count, type: .Italic)]))