From 3ff945bf63f26ab0c88baee519b6bbf10e66cf1b Mon Sep 17 00:00:00 2001 From: Peter <> Date: Fri, 3 May 2019 15:04:27 +0400 Subject: [PATCH] Updated archive folder appearance --- TelegramUI.xcodeproj/project.pbxproj | 2 +- .../xcschemes/TelegramUI.xcscheme | 80 +++++++++ TelegramUI/ChatListController.swift | 2 +- TelegramUI/ChatListControllerNode.swift | 21 +++ TelegramUI/ChatListItem.swift | 153 +++++++++++------- TelegramUI/ChatListNode.swift | 8 +- TelegramUI/ChatListNodeEntries.swift | 31 ++-- TelegramUI/ChatListSearchContainerNode.swift | 2 +- 8 files changed, 213 insertions(+), 86 deletions(-) create mode 100644 TelegramUI.xcodeproj/xcshareddata/xcschemes/TelegramUI.xcscheme diff --git a/TelegramUI.xcodeproj/project.pbxproj b/TelegramUI.xcodeproj/project.pbxproj index 1d20a5e502..d57306cba5 100644 --- a/TelegramUI.xcodeproj/project.pbxproj +++ b/TelegramUI.xcodeproj/project.pbxproj @@ -7099,7 +7099,7 @@ PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramUI; PRODUCT_NAME = TelegramUI; PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; + SKIP_INSTALL = NO; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 4.0; diff --git a/TelegramUI.xcodeproj/xcshareddata/xcschemes/TelegramUI.xcscheme b/TelegramUI.xcodeproj/xcshareddata/xcschemes/TelegramUI.xcscheme new file mode 100644 index 0000000000..92d31f8975 --- /dev/null +++ b/TelegramUI.xcodeproj/xcshareddata/xcschemes/TelegramUI.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TelegramUI/ChatListController.swift b/TelegramUI/ChatListController.swift index dc8398dab8..e0f28f26b4 100644 --- a/TelegramUI/ChatListController.swift +++ b/TelegramUI/ChatListController.swift @@ -1237,7 +1237,7 @@ public class ChatListController: TelegramController, KeyShortcutResponder, UIVie } else { return nil } - case let .groupReference(groupId, _, _, _, _): + case let .groupReference(groupId, _, _, _): let chatListController = ChatListController(context: self.context, groupId: groupId, controlsHistoryPreload: false) chatListController.containerLayoutUpdated(ContainerViewLayout(size: contentSize, metrics: LayoutMetrics(), intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: nil, inputHeight: nil, standardInputHeight: 216.0, inputHeightIsInteractivellyChanging: false, inVoiceOver: false), transition: .immediate) return (chatListController, sourceRect) diff --git a/TelegramUI/ChatListControllerNode.swift b/TelegramUI/ChatListControllerNode.swift index 0d3c41375f..526d7cf5df 100644 --- a/TelegramUI/ChatListControllerNode.swift +++ b/TelegramUI/ChatListControllerNode.swift @@ -4,6 +4,7 @@ import AsyncDisplayKit import Display import Postbox import TelegramCore +import SwiftSignalKit private final class ChatListControllerNodeView: UITracingLayerView, PreviewingHostView { var previewingDelegate: PreviewingHostViewDelegate? { @@ -17,6 +18,22 @@ private final class ChatListControllerNodeView: UITracingLayerView, PreviewingHo weak var controller: ChatListController? } +private struct TestItem: Comparable, Identifiable { + var value: Int + var version: Int + + var stableId: Int { + return self.value + } + + static func <(lhs: TestItem, rhs: TestItem) -> Bool { + if lhs.version != rhs.version { + return lhs.version < rhs.version + } + return lhs.value < rhs.value + } +} + final class ChatListControllerNode: ASDisplayNode { private let context: AccountContext private let groupId: PeerGroupId @@ -43,6 +60,8 @@ final class ChatListControllerNode: ASDisplayNode { var requestAddContact: ((String) -> Void)? var dismissSelf: (() -> Void)? + let debugListView = ListView() + init(context: AccountContext, groupId: PeerGroupId, controlsHistoryPreload: Bool, presentationData: PresentationData, controller: ChatListController) { self.context = context self.groupId = groupId @@ -106,6 +125,8 @@ final class ChatListControllerNode: ASDisplayNode { } } } + + self.addSubnode(self.debugListView) } override func didLoad() { diff --git a/TelegramUI/ChatListItem.swift b/TelegramUI/ChatListItem.swift index 87e48367c8..25879a0bdb 100644 --- a/TelegramUI/ChatListItem.swift +++ b/TelegramUI/ChatListItem.swift @@ -8,7 +8,7 @@ import TelegramCore enum ChatListItemContent { case peer(message: Message?, peer: RenderedPeer, combinedReadState: CombinedPeerReadState?, notificationSettings: PeerNotificationSettings?, presence: PeerPresence?, summaryInfo: ChatListMessageTagSummaryInfo, embeddedState: PeerChatListEmbeddedInterfaceState?, inputActivities: [(Peer, PeerInputActivity)]?, isAd: Bool, ignoreUnreadBadge: Bool) - case groupReference(groupId: PeerGroupId, peer: RenderedPeer, message: Message?, unreadState: PeerGroupUnreadCountersCombinedSummary, hiddenByDefault: Bool) + case groupReference(groupId: PeerGroupId, peers: [RenderedPeer], unreadState: PeerGroupUnreadCountersCombinedSummary, hiddenByDefault: Bool) var chatLocation: ChatLocation? { switch self { @@ -113,7 +113,7 @@ class ChatListItem: ListViewItem { } else if let peer = peer.peers[peer.peerId] { self.interaction.peerSelected(peer) } - case let .groupReference(groupId, _, _, _, _): + case let .groupReference(groupId, _, _, _): self.interaction.groupSelected(groupId) } } @@ -566,7 +566,11 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { return { item, params, first, last, firstWithHeader, nextIsPinned in let account = item.account var message: Message? - let itemPeer: RenderedPeer + enum ContentPeer { + case chat(RenderedPeer) + case group([RenderedPeer]) + } + let contentPeer: ContentPeer let combinedReadState: CombinedPeerReadState? let unreadCount: (count: Int32, unread: Bool, muted: Bool, mutedCount: Int32?) let notificationSettings: PeerNotificationSettings? @@ -582,7 +586,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { switch item.content { case let .peer(messageValue, peerValue, combinedReadStateValue, notificationSettingsValue, peerPresenceValue, summaryInfoValue, embeddedStateValue, inputActivitiesValue, isAdValue, ignoreUnreadBadge): message = messageValue - itemPeer = peerValue + contentPeer = .chat(peerValue) combinedReadState = combinedReadStateValue if let combinedReadState = combinedReadState, !isAdValue && !ignoreUnreadBadge { unreadCount = (combinedReadState.count, combinedReadState.isUnread, notificationSettingsValue?.isRemovedFromTotalUnreadCount ?? false, nil) @@ -600,9 +604,9 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { inputActivities = inputActivitiesValue isPeerGroup = false isAd = isAdValue - case let .groupReference(_, peer, messageValue, unreadState, hiddenByDefault): - itemPeer = peer - message = messageValue + case let .groupReference(_, peers, unreadState, hiddenByDefault): + contentPeer = .group(peers) + message = nil combinedReadState = nil notificationSettings = nil embeddedState = nil @@ -670,10 +674,22 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { let leftInset: CGFloat = params.leftInset + 78.0 - let (peer, initialHideAuthor, messageText) = chatListItemStrings(strings: item.presentationData.strings, nameDisplayOrder: item.presentationData.nameDisplayOrder, message: message, chatPeer: itemPeer, accountPeerId: item.account.peerId) - var hideAuthor = initialHideAuthor - if isPeerGroup { - hideAuthor = false + enum ContentData { + case chat(itemPeer: RenderedPeer, peer: Peer?, hideAuthor: Bool, messageText: String) + case group(peers: [RenderedPeer]) + } + + let contentData: ContentData + + var hideAuthor = false + switch contentPeer { + case let .chat(itemPeer): + let (peer, initialHideAuthor, messageText) = chatListItemStrings(strings: item.presentationData.strings, nameDisplayOrder: item.presentationData.nameDisplayOrder, message: message, chatPeer: itemPeer, accountPeerId: item.account.peerId) + contentData = .chat(itemPeer: itemPeer, peer: peer, hideAuthor: hideAuthor, messageText: messageText) + hideAuthor = initialHideAuthor + case let .group(groupPeers): + contentData = .group(peers: groupPeers) + hideAuthor = true } let attributedText: NSAttributedString @@ -690,59 +706,76 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { } } - if inlineAuthorPrefix == nil, let embeddedState = embeddedState as? ChatEmbeddedInterfaceState { - hasDraft = true - authorAttributedString = NSAttributedString(string: item.presentationData.strings.DialogList_Draft, font: textFont, textColor: theme.messageDraftTextColor) - - attributedText = NSAttributedString(string: embeddedState.text.string, font: textFont, textColor: theme.messageTextColor) - } else if let message = message { - if let inlineAuthorPrefix = inlineAuthorPrefix { - let composedString = NSMutableAttributedString() - composedString.append(NSAttributedString(string: "\(inlineAuthorPrefix): ", font: textFont, textColor: theme.titleColor)) - composedString.append(NSAttributedString(string: messageText, font: textFont, textColor: theme.messageTextColor)) - attributedText = composedString - } else { - attributedText = NSAttributedString(string: messageText, font: textFont, textColor: theme.messageTextColor) - } - - var peerText: String? - if case .groupReference = item.content { - if let messagePeer = itemPeer.chatMainPeer { - peerText = messagePeer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) - } - } else if let author = message.author as? TelegramUser, let peer = peer, !(peer is TelegramUser) { - if let peer = peer as? TelegramChannel, case .broadcast = peer.info { + switch contentData { + case let .chat(itemPeer, peer, _, messageText): + if inlineAuthorPrefix == nil, let embeddedState = embeddedState as? ChatEmbeddedInterfaceState { + hasDraft = true + authorAttributedString = NSAttributedString(string: item.presentationData.strings.DialogList_Draft, font: textFont, textColor: theme.messageDraftTextColor) + + attributedText = NSAttributedString(string: embeddedState.text.string, font: textFont, textColor: theme.messageTextColor) + } else if let message = message { + if let inlineAuthorPrefix = inlineAuthorPrefix { + let composedString = NSMutableAttributedString() + composedString.append(NSAttributedString(string: "\(inlineAuthorPrefix): ", font: textFont, textColor: theme.titleColor)) + composedString.append(NSAttributedString(string: messageText, font: textFont, textColor: theme.messageTextColor)) + attributedText = composedString + } else { + attributedText = NSAttributedString(string: messageText, font: textFont, textColor: theme.messageTextColor) + } + + var peerText: String? + if case .groupReference = item.content { + if let messagePeer = itemPeer.chatMainPeer { + peerText = messagePeer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + } + } else if let author = message.author as? TelegramUser, let peer = peer, !(peer is TelegramUser) { + if let peer = peer as? TelegramChannel, case .broadcast = peer.info { + } else { + peerText = author.id == account.peerId ? item.presentationData.strings.DialogList_You : author.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + } + } + + if let peerText = peerText { + authorAttributedString = NSAttributedString(string: peerText, font: textFont, textColor: theme.authorNameColor) + } } else { - peerText = author.id == account.peerId ? item.presentationData.strings.DialogList_You : author.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + attributedText = NSAttributedString(string: messageText, font: textFont, textColor: theme.messageTextColor) + + var peerText: String? + if case .groupReference = item.content { + if let messagePeer = itemPeer.chatMainPeer { + peerText = messagePeer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + } + } + + if let peerText = peerText { + authorAttributedString = NSAttributedString(string: peerText, font: textFont, textColor: theme.authorNameColor) + } } - } - - if let peerText = peerText { - authorAttributedString = NSAttributedString(string: peerText, font: textFont, textColor: theme.authorNameColor) - } - } else { - attributedText = NSAttributedString(string: messageText, font: textFont, textColor: theme.messageTextColor) - - var peerText: String? - if case .groupReference = item.content { - if let messagePeer = itemPeer.chatMainPeer { - peerText = messagePeer.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) + case let .group(peers): + var textString = "" + for peer in peers { + if let peer = peer.chatMainPeer { + let peerTitle = peer.compactDisplayTitle + if !peerTitle.isEmpty { + if !textString.isEmpty { + textString.append(", ") + } + textString.append(peerTitle) + } + } } - } - - if let peerText = peerText { - authorAttributedString = NSAttributedString(string: peerText, font: textFont, textColor: theme.authorNameColor) - } + attributedText = NSAttributedString(string: textString, font: textFont, textColor: theme.messageTextColor) } - switch item.content { - case .peer: + switch contentData { + case let .chat(_, peer, _, _): if peer?.id == item.account.peerId { titleAttributedString = NSAttributedString(string: item.presentationData.strings.DialogList_SavedMessages, font: titleFont, textColor: theme.titleColor) } else if let displayTitle = peer?.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder) { titleAttributedString = NSAttributedString(string: displayTitle, font: titleFont, textColor: item.index.messageIndex.id.peerId.namespace == Namespaces.Peer.SecretChat ? theme.secretTitleColor : theme.titleColor) } - case .groupReference: + case .group: titleAttributedString = NSAttributedString(string: item.presentationData.strings.ChatList_ArchivedChatsTitle, font: titleFont, textColor: theme.titleColor) } @@ -755,7 +788,9 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { let timestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970) let dateText = stringForRelativeTimestamp(strings: item.presentationData.strings, relativeTimestamp: item.index.messageIndex.timestamp, relativeTo: timestamp, dateTimeFormat: item.presentationData.dateTimeFormat) - if isAd { + if isPeerGroup { + dateAttributedString = NSAttributedString(string: "", font: dateFont, textColor: theme.dateTextColor) + } else if isAd { dateAttributedString = NSAttributedString(string: item.presentationData.strings.DialogList_AdLabel, font: dateFont, textColor: theme.dateTextColor) } else { dateAttributedString = NSAttributedString(string: dateText, font: dateFont, textColor: theme.dateTextColor) @@ -845,7 +880,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { var isVerified = false let isSecret = !isPeerGroup && item.index.messageIndex.id.peerId.namespace == Namespaces.Peer.SecretChat - if case .peer = item.content { + if case let .chat(itemPeer) = contentPeer { if let peer = itemPeer.chatMainPeer { if let peer = peer as? TelegramUser { isVerified = peer.flags.contains(.isVerified) @@ -937,7 +972,11 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { if item.enableContextActions && !isAd { peerRevealOptions = revealOptions(strings: item.presentationData.strings, theme: item.presentationData.theme, isPinned: isPinned, isMuted: item.account.peerId != item.index.messageIndex.id.peerId ? (currentMutedIconImage != nil) : nil, groupId: item.peerGroupId, peerId: renderedPeer.peerId, accountPeerId: item.account.peerId, canDelete: true, isEditing: item.editing) - peerLeftRevealOptions = leftRevealOptions(strings: item.presentationData.strings, theme: item.presentationData.theme, isUnread: unreadCount.unread, isEditing: item.editing, isPinned: isPinned, isSavedMessages: itemPeer.peerId == item.account.peerId, groupId: item.peerGroupId) + if case let .chat(itemPeer) = contentPeer { + peerLeftRevealOptions = leftRevealOptions(strings: item.presentationData.strings, theme: item.presentationData.theme, isUnread: unreadCount.unread, isEditing: item.editing, isPinned: isPinned, isSavedMessages: itemPeer.peerId == item.account.peerId, groupId: item.peerGroupId) + } else { + peerLeftRevealOptions = [] + } } else { peerRevealOptions = [] peerLeftRevealOptions = [] diff --git a/TelegramUI/ChatListNode.swift b/TelegramUI/ChatListNode.swift index 686080d160..8be973ec39 100644 --- a/TelegramUI/ChatListNode.swift +++ b/TelegramUI/ChatListNode.swift @@ -210,8 +210,8 @@ private func mappedInsertEntries(account: Account, nodeInteraction: ChatListNode } case let .HoleEntry(_, theme): return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListHoleItem(theme: theme), directionHint: entry.directionHint) - case let .GroupReferenceEntry(index, presentationData, groupId, peer, message, editing, unreadState, revealed, hiddenByDefault): - return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListItem(presentationData: presentationData, account: account, peerGroupId: peerGroupId, index: index, content: .groupReference(groupId: groupId, peer: peer, message: message, unreadState: unreadState, hiddenByDefault: hiddenByDefault), editing: editing, hasActiveRevealControls: false, selected: false, header: nil, enableContextActions: true, hiddenOffset: hiddenByDefault && !revealed, interaction: nodeInteraction), directionHint: entry.directionHint) + case let .GroupReferenceEntry(index, presentationData, groupId, peers, editing, unreadState, revealed, hiddenByDefault): + return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListItem(presentationData: presentationData, account: account, peerGroupId: peerGroupId, index: index, content: .groupReference(groupId: groupId, peers: peers, unreadState: unreadState, hiddenByDefault: hiddenByDefault), editing: editing, hasActiveRevealControls: false, selected: false, header: nil, enableContextActions: true, hiddenOffset: hiddenByDefault && !revealed, interaction: nodeInteraction), directionHint: entry.directionHint) case let .ArchiveIntro(presentationData): return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListArchiveInfoItem(theme: presentationData.theme, strings: presentationData.strings), directionHint: entry.directionHint) } @@ -249,8 +249,8 @@ private func mappedUpdateEntries(account: Account, nodeInteraction: ChatListNode } case let .HoleEntry(_, theme): return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListHoleItem(theme: theme), directionHint: entry.directionHint) - case let .GroupReferenceEntry(index, presentationData, groupId, peer, message, editing, unreadState, revealed, hiddenByDefault): - return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListItem(presentationData: presentationData, account: account, peerGroupId: peerGroupId, index: index, content: .groupReference(groupId: groupId, peer: peer, message: message, unreadState: unreadState, hiddenByDefault: hiddenByDefault), editing: editing, hasActiveRevealControls: false, selected: false, header: nil, enableContextActions: true, hiddenOffset: hiddenByDefault && !revealed, interaction: nodeInteraction), directionHint: entry.directionHint) + case let .GroupReferenceEntry(index, presentationData, groupId, peers, editing, unreadState, revealed, hiddenByDefault): + return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListItem(presentationData: presentationData, account: account, peerGroupId: peerGroupId, index: index, content: .groupReference(groupId: groupId, peers: peers, unreadState: unreadState, hiddenByDefault: hiddenByDefault), editing: editing, hasActiveRevealControls: false, selected: false, header: nil, enableContextActions: true, hiddenOffset: hiddenByDefault && !revealed, interaction: nodeInteraction), directionHint: entry.directionHint) case let .ArchiveIntro(presentationData): return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ChatListArchiveInfoItem(theme: presentationData.theme, strings: presentationData.strings), directionHint: entry.directionHint) } diff --git a/TelegramUI/ChatListNodeEntries.swift b/TelegramUI/ChatListNodeEntries.swift index 733386d831..fa8fba18bf 100644 --- a/TelegramUI/ChatListNodeEntries.swift +++ b/TelegramUI/ChatListNodeEntries.swift @@ -12,7 +12,7 @@ enum ChatListNodeEntryId: Hashable { enum ChatListNodeEntry: Comparable, Identifiable { case PeerEntry(index: ChatListIndex, presentationData: ChatListPresentationData, message: Message?, readState: CombinedPeerReadState?, notificationSettings: PeerNotificationSettings?, embeddedInterfaceState: PeerChatListEmbeddedInterfaceState?, peer: RenderedPeer, presence: PeerPresence?, summaryInfo: ChatListMessageTagSummaryInfo, editing: Bool, hasActiveRevealControls: Bool, selected: Bool, inputActivities: [(Peer, PeerInputActivity)]?, isAd: Bool) case HoleEntry(ChatListHole, theme: PresentationTheme) - case GroupReferenceEntry(index: ChatListIndex, presentationData: ChatListPresentationData, groupId: PeerGroupId, peer: RenderedPeer, message: Message?, editing: Bool, unreadState: PeerGroupUnreadCountersCombinedSummary, revealed: Bool, hiddenByDefault: Bool) + case GroupReferenceEntry(index: ChatListIndex, presentationData: ChatListPresentationData, groupId: PeerGroupId, peers: [RenderedPeer], editing: Bool, unreadState: PeerGroupUnreadCountersCombinedSummary, revealed: Bool, hiddenByDefault: Bool) case ArchiveIntro(presentationData: ChatListPresentationData) var sortIndex: ChatListIndex { @@ -21,7 +21,7 @@ enum ChatListNodeEntry: Comparable, Identifiable { return index case let .HoleEntry(hole, _): return ChatListIndex(pinningIndex: nil, messageIndex: hole.index) - case let .GroupReferenceEntry(index, _, _, _, _, _, _, _, _): + case let .GroupReferenceEntry(index, _, _, _, _, _, _, _): return index case .ArchiveIntro: return ChatListIndex.absoluteUpperBound @@ -34,7 +34,7 @@ enum ChatListNodeEntry: Comparable, Identifiable { return .PeerId(index.messageIndex.id.peerId.toInt64()) case let .HoleEntry(hole, _): return .Hole(Int64(hole.index.id.id)) - case let .GroupReferenceEntry(_, _, groupId, _, _, _, _, _, _): + case let .GroupReferenceEntry(_, _, groupId, _, _, _, _, _): return .GroupId(groupId) case .ArchiveIntro: return .ArchiveIntro @@ -128,8 +128,8 @@ enum ChatListNodeEntry: Comparable, Identifiable { default: return false } - case let .GroupReferenceEntry(lhsIndex, lhsPresentationData, lhsGroupId, lhsPeer, lhsMessage, lhsEditing, lhsUnreadState, lhsRevealed, lhsHiddenByDefault): - if case let .GroupReferenceEntry(rhsIndex, rhsPresentationData, rhsGroupId, rhsPeer, rhsMessage, rhsEditing, rhsUnreadState, rhsRevealed, rhsHiddenByDefault) = rhs { + case let .GroupReferenceEntry(lhsIndex, lhsPresentationData, lhsGroupId, lhsPeers, lhsEditing, lhsUnreadState, lhsRevealed, lhsHiddenByDefault): + if case let .GroupReferenceEntry(rhsIndex, rhsPresentationData, rhsGroupId, rhsPeers, rhsEditing, rhsUnreadState, rhsRevealed, rhsHiddenByDefault) = rhs { if lhsIndex != rhsIndex { return false } @@ -139,13 +139,7 @@ enum ChatListNodeEntry: Comparable, Identifiable { if lhsGroupId != rhsGroupId { return false } - if lhsPeer != rhsPeer { - return false - } - if lhsMessage?.stableVersion != rhsMessage?.stableVersion { - return false - } - if lhsMessage?.id != rhsMessage?.id || lhsMessage?.flags != rhsMessage?.flags { + if lhsPeers != rhsPeers { return false } if lhsEditing != rhsEditing { @@ -193,9 +187,7 @@ func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, if view.laterIndex == nil, case .chatList = mode { var groupEntryCount = 0 for groupReference in view.groupEntries { - if let _ = groupReference.message { - groupEntryCount += 1 - } + groupEntryCount += 1 } pinnedIndexOffset += UInt16(groupEntryCount) } @@ -249,13 +241,8 @@ func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, if view.laterIndex == nil, case .chatList = mode { for groupReference in view.groupEntries { - let messageIndex: MessageIndex - if let message = groupReference.message { - messageIndex = message.index - } else { - messageIndex = MessageIndex(id: MessageId(peerId: groupReference.renderedPeer.peerId, namespace: 0, id: 0), timestamp: 1) - } - result.append(.GroupReferenceEntry(index: ChatListIndex(pinningIndex: pinningIndex, messageIndex: messageIndex), presentationData: state.presentationData, groupId: groupReference.groupId, peer: groupReference.renderedPeer, message: groupReference.message, editing: state.editing, unreadState: groupReference.unreadState, revealed: state.archiveShouldBeTemporaryRevealed, hiddenByDefault: hideArchivedFolderByDefault)) + let messageIndex = MessageIndex(id: MessageId(peerId: PeerId(namespace: 0, id: 0), namespace: 0, id: 0), timestamp: 1) + result.append(.GroupReferenceEntry(index: ChatListIndex(pinningIndex: pinningIndex, messageIndex: messageIndex), presentationData: state.presentationData, groupId: groupReference.groupId, peers: groupReference.renderedPeers, editing: state.editing, unreadState: groupReference.unreadState, revealed: state.archiveShouldBeTemporaryRevealed, hiddenByDefault: hideArchivedFolderByDefault)) if pinningIndex != 0 { pinningIndex -= 1 } diff --git a/TelegramUI/ChatListSearchContainerNode.swift b/TelegramUI/ChatListSearchContainerNode.swift index 1521d88fb0..ecb980145e 100644 --- a/TelegramUI/ChatListSearchContainerNode.swift +++ b/TelegramUI/ChatListSearchContainerNode.swift @@ -1174,7 +1174,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { switch item.content { case let .peer(message, peer, _, _, _, _, _, _, _, _): return (selectedItemNode.view, bounds, message?.id ?? peer.peerId) - case let .groupReference(groupId, _, _, _, _): + case let .groupReference(groupId, _, _, _): return (selectedItemNode.view, bounds, groupId) } }