mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various Fixes
(cherry picked from commit cf4f852043c87db05e9ee5f82daad7e1dff69987)
This commit is contained in:
parent
690fb6c610
commit
90725b9db9
@ -63,7 +63,7 @@ public enum PeerSelectionControllerSendMode {
|
|||||||
|
|
||||||
public protocol PeerSelectionController: ViewController {
|
public protocol PeerSelectionController: ViewController {
|
||||||
var peerSelected: ((Peer) -> Void)? { get set }
|
var peerSelected: ((Peer) -> Void)? { get set }
|
||||||
var multiplePeersSelected: (([Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)? { get set }
|
var multiplePeersSelected: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)? { get set }
|
||||||
var inProgress: Bool { get set }
|
var inProgress: Bool { get set }
|
||||||
var customDismiss: (() -> Void)? { get set }
|
var customDismiss: (() -> Void)? { get set }
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ private final class ChatListShimmerNode: ASDisplayNode {
|
|||||||
let peer1 = TelegramUser(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt32Value(0)), accessHash: nil, firstName: "FirstName", lastName: nil, username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [])
|
let peer1 = TelegramUser(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt32Value(0)), accessHash: nil, firstName: "FirstName", lastName: nil, username: nil, phone: nil, photo: [], botInfo: nil, restrictionInfo: nil, flags: [])
|
||||||
let timestamp1: Int32 = 100000
|
let timestamp1: Int32 = 100000
|
||||||
let peers = SimpleDictionary<PeerId, Peer>()
|
let peers = SimpleDictionary<PeerId, Peer>()
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
||||||
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in }, activateChatPreview: { _, _, gesture in
|
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in }, activateChatPreview: { _, _, gesture in
|
||||||
gesture?.cancel()
|
gesture?.cancel()
|
||||||
}, present: { _ in })
|
}, present: { _ in })
|
||||||
@ -1170,7 +1170,7 @@ final class ChatListControllerNode: ASDisplayNode {
|
|||||||
filter.insert(.excludeRecent)
|
filter.insert(.excludeRecent)
|
||||||
}
|
}
|
||||||
|
|
||||||
let contentNode = ChatListSearchContainerNode(context: self.context, filter: filter, groupId: self.groupId, displaySearchFilters: displaySearchFilters, initialFilter: initialFilter, openPeer: { [weak self] peer, dismissSearch in
|
let contentNode = ChatListSearchContainerNode(context: self.context, filter: filter, groupId: self.groupId, displaySearchFilters: displaySearchFilters, initialFilter: initialFilter, openPeer: { [weak self] peer, _, dismissSearch in
|
||||||
self?.requestOpenPeerFromSearch?(peer, dismissSearch)
|
self?.requestOpenPeerFromSearch?(peer, dismissSearch)
|
||||||
}, openDisabledPeer: { _ in
|
}, openDisabledPeer: { _ in
|
||||||
}, openRecentPeerOptions: { [weak self] peer in
|
}, openRecentPeerOptions: { [weak self] peer in
|
||||||
|
@ -38,7 +38,7 @@ private enum ChatListTokenId: Int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final class ChatListSearchInteraction {
|
final class ChatListSearchInteraction {
|
||||||
let openPeer: (Peer, Bool) -> Void
|
let openPeer: (Peer, Peer?, Bool) -> Void
|
||||||
let openDisabledPeer: (Peer) -> Void
|
let openDisabledPeer: (Peer) -> Void
|
||||||
let openMessage: (Peer, MessageId, Bool) -> Void
|
let openMessage: (Peer, MessageId, Bool) -> Void
|
||||||
let openUrl: (String) -> Void
|
let openUrl: (String) -> Void
|
||||||
@ -52,7 +52,7 @@ final class ChatListSearchInteraction {
|
|||||||
let dismissInput: () -> Void
|
let dismissInput: () -> Void
|
||||||
let getSelectedMessageIds: () -> Set<MessageId>?
|
let getSelectedMessageIds: () -> Set<MessageId>?
|
||||||
|
|
||||||
init(openPeer: @escaping (Peer, Bool) -> Void, openDisabledPeer: @escaping (Peer) -> Void, openMessage: @escaping (Peer, MessageId, Bool) -> Void, openUrl: @escaping (String) -> Void, clearRecentSearch: @escaping () -> Void, addContact: @escaping (String) -> Void, toggleMessageSelection: @escaping (MessageId, Bool) -> Void, messageContextAction: @escaping ((Message, ASDisplayNode?, CGRect?, UIGestureRecognizer?) -> Void), mediaMessageContextAction: @escaping ((Message, ASDisplayNode?, CGRect?, UIGestureRecognizer?) -> Void), peerContextAction: ((Peer, ChatListSearchContextActionSource, ASDisplayNode, ContextGesture?) -> Void)?, present: @escaping (ViewController, Any?) -> Void, dismissInput: @escaping () -> Void, getSelectedMessageIds: @escaping () -> Set<MessageId>?) {
|
init(openPeer: @escaping (Peer, Peer?, Bool) -> Void, openDisabledPeer: @escaping (Peer) -> Void, openMessage: @escaping (Peer, MessageId, Bool) -> Void, openUrl: @escaping (String) -> Void, clearRecentSearch: @escaping () -> Void, addContact: @escaping (String) -> Void, toggleMessageSelection: @escaping (MessageId, Bool) -> Void, messageContextAction: @escaping ((Message, ASDisplayNode?, CGRect?, UIGestureRecognizer?) -> Void), mediaMessageContextAction: @escaping ((Message, ASDisplayNode?, CGRect?, UIGestureRecognizer?) -> Void), peerContextAction: ((Peer, ChatListSearchContextActionSource, ASDisplayNode, ContextGesture?) -> Void)?, present: @escaping (ViewController, Any?) -> Void, dismissInput: @escaping () -> Void, getSelectedMessageIds: @escaping () -> Set<MessageId>?) {
|
||||||
self.openPeer = openPeer
|
self.openPeer = openPeer
|
||||||
self.openDisabledPeer = openDisabledPeer
|
self.openDisabledPeer = openDisabledPeer
|
||||||
self.openMessage = openMessage
|
self.openMessage = openMessage
|
||||||
@ -124,7 +124,7 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
|
|
||||||
private var validLayout: (ContainerViewLayout, CGFloat)?
|
private var validLayout: (ContainerViewLayout, CGFloat)?
|
||||||
|
|
||||||
public init(context: AccountContext, filter: ChatListNodePeersFilter, groupId: PeerGroupId, displaySearchFilters: Bool, initialFilter: ChatListSearchFilter = .chats, openPeer originalOpenPeer: @escaping (Peer, Bool) -> Void, openDisabledPeer: @escaping (Peer) -> Void, openRecentPeerOptions: @escaping (Peer) -> Void, openMessage originalOpenMessage: @escaping (Peer, MessageId, Bool) -> Void, addContact: ((String) -> Void)?, peerContextAction: ((Peer, ChatListSearchContextActionSource, ASDisplayNode, ContextGesture?) -> Void)?, present: @escaping (ViewController, Any?) -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, navigationController: NavigationController?) {
|
public init(context: AccountContext, filter: ChatListNodePeersFilter, groupId: PeerGroupId, displaySearchFilters: Bool, initialFilter: ChatListSearchFilter = .chats, openPeer originalOpenPeer: @escaping (Peer, Peer?, Bool) -> Void, openDisabledPeer: @escaping (Peer) -> Void, openRecentPeerOptions: @escaping (Peer) -> Void, openMessage originalOpenMessage: @escaping (Peer, MessageId, Bool) -> Void, addContact: ((String) -> Void)?, peerContextAction: ((Peer, ChatListSearchContextActionSource, ASDisplayNode, ContextGesture?) -> Void)?, present: @escaping (ViewController, Any?) -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, navigationController: NavigationController?) {
|
||||||
self.context = context
|
self.context = context
|
||||||
self.peersFilter = filter
|
self.peersFilter = filter
|
||||||
self.groupId = groupId
|
self.groupId = groupId
|
||||||
@ -149,8 +149,8 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
|
|
||||||
self.addSubnode(self.paneContainerNode)
|
self.addSubnode(self.paneContainerNode)
|
||||||
|
|
||||||
let interaction = ChatListSearchInteraction(openPeer: { peer, value in
|
let interaction = ChatListSearchInteraction(openPeer: { peer, chatPeer, value in
|
||||||
originalOpenPeer(peer, value)
|
originalOpenPeer(peer, chatPeer, value)
|
||||||
if peer.id.namespace != Namespaces.Peer.SecretChat {
|
if peer.id.namespace != Namespaces.Peer.SecretChat {
|
||||||
addAppLogEvent(postbox: context.account.postbox, type: "search_global_open_peer", peerId: peer.id)
|
addAppLogEvent(postbox: context.account.postbox, type: "search_global_open_peer", peerId: peer.id)
|
||||||
}
|
}
|
||||||
@ -901,7 +901,7 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
}).start()
|
}).start()
|
||||||
|
|
||||||
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled], multipleSelection: true))
|
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled], multipleSelection: true))
|
||||||
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, messageText, mode in
|
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, peerMap, messageText, mode in
|
||||||
guard let strongSelf = self, let strongController = peerSelectionController else {
|
guard let strongSelf = self, let strongController = peerSelectionController else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -926,6 +926,7 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
return .forward(source: messageId, grouping: .auto, attributes: [], correlationId: nil)
|
return .forward(source: messageId, grouping: .auto, attributes: [], correlationId: nil)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var displayPeers: [Peer] = []
|
||||||
for peer in peers {
|
for peer in peers {
|
||||||
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peer.id, messages: result)
|
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peer.id, messages: result)
|
||||||
|> deliverOnMainQueue).start(next: { messageIds in
|
|> deliverOnMainQueue).start(next: { messageIds in
|
||||||
@ -951,31 +952,38 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
|> deliverOnMainQueue).start())
|
|> deliverOnMainQueue).start())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
if let secretPeer = peer as? TelegramSecretChat {
|
||||||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
if let peer = peerMap[secretPeer.regularPeerId] {
|
||||||
let text: String
|
displayPeers.append(peer)
|
||||||
var savedMessages = false
|
|
||||||
if peers.count == 1, let peerId = peers.first?.id, peerId == strongSelf.context.account.peerId {
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many
|
|
||||||
savedMessages = true
|
|
||||||
} else {
|
|
||||||
if peers.count == 1, let peer = peers.first {
|
|
||||||
let peerName = peer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string : presentationData.strings.Conversation_ForwardTooltip_Chat_Many(peerName).string
|
|
||||||
} else if peers.count == 2, let firstPeer = peers.first, let secondPeer = peers.last {
|
|
||||||
let firstPeerName = firstPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
let secondPeerName = secondPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string : presentationData.strings.Conversation_ForwardTooltip_TwoChats_Many(firstPeerName, secondPeerName).string
|
|
||||||
} else if let peer = peers.first {
|
|
||||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(peers.count - 1)").string : presentationData.strings.Conversation_ForwardTooltip_ManyChats_Many(peerName, "\(peers.count - 1)").string
|
|
||||||
} else {
|
|
||||||
text = ""
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
displayPeers.append(peer)
|
||||||
}
|
}
|
||||||
|
|
||||||
(strongSelf.navigationController?.topViewController as? ViewController)?.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: savedMessages, text: text), elevatedLayout: false, animateInAsReplacement: true, action: { _ in return false }), in: .current)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
let text: String
|
||||||
|
var savedMessages = false
|
||||||
|
if displayPeers.count == 1, let peerId = displayPeers.first?.id, peerId == strongSelf.context.account.peerId {
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many
|
||||||
|
savedMessages = true
|
||||||
|
} else {
|
||||||
|
if displayPeers.count == 1, let peer = displayPeers.first {
|
||||||
|
let peerName = peer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string : presentationData.strings.Conversation_ForwardTooltip_Chat_Many(peerName).string
|
||||||
|
} else if displayPeers.count == 2, let firstPeer = displayPeers.first, let secondPeer = displayPeers.last {
|
||||||
|
let firstPeerName = firstPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
let secondPeerName = secondPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string : presentationData.strings.Conversation_ForwardTooltip_TwoChats_Many(firstPeerName, secondPeerName).string
|
||||||
|
} else if let peer = displayPeers.first {
|
||||||
|
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(displayPeers.count - 1)").string : presentationData.strings.Conversation_ForwardTooltip_ManyChats_Many(peerName, "\(displayPeers.count - 1)").string
|
||||||
|
} else {
|
||||||
|
text = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(strongSelf.navigationController?.topViewController as? ViewController)?.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: savedMessages, text: text), elevatedLayout: false, animateInAsReplacement: true, action: { _ in return false }), in: .current)
|
||||||
}
|
}
|
||||||
peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peer in
|
peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peer in
|
||||||
let peerId = peer.id
|
let peerId = peer.id
|
||||||
|
@ -440,8 +440,12 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return ContactsPeerItem(presentationData: ItemListPresentationData(presentationData), sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: .generalSearch, peer: .peer(peer: primaryPeer, chatPeer: chatPeer), status: .none, badge: badge, enabled: enabled, selection: .none, editing: ContactsPeerItemEditing(editable: false, editing: false, revealed: false), index: nil, header: header, action: { _ in
|
return ContactsPeerItem(presentationData: ItemListPresentationData(presentationData), sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: .generalSearch, peer: .peer(peer: primaryPeer, chatPeer: chatPeer), status: .none, badge: badge, enabled: enabled, selection: .none, editing: ContactsPeerItemEditing(editable: false, editing: false, revealed: false), index: nil, header: header, action: { contactPeer in
|
||||||
interaction.peerSelected(peer, nil)
|
if case let .peer(maybePeer, maybeChatPeer) = contactPeer, let peer = maybePeer, let chatPeer = maybeChatPeer {
|
||||||
|
interaction.peerSelected(chatPeer, peer, nil)
|
||||||
|
} else {
|
||||||
|
interaction.peerSelected(peer, nil, nil)
|
||||||
|
}
|
||||||
}, contextAction: peerContextAction.flatMap { peerContextAction in
|
}, contextAction: peerContextAction.flatMap { peerContextAction in
|
||||||
return { node, gesture in
|
return { node, gesture in
|
||||||
if let chatPeer = chatPeer, chatPeer.id.namespace != Namespaces.Peer.SecretChat {
|
if let chatPeer = chatPeer, chatPeer.id.namespace != Namespaces.Peer.SecretChat {
|
||||||
@ -504,7 +508,7 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ContactsPeerItem(presentationData: ItemListPresentationData(presentationData), sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: .generalSearch, peer: .peer(peer: peer.peer, chatPeer: peer.peer), status: .addressName(suffixString), badge: badge, enabled: enabled, selection: .none, editing: ContactsPeerItemEditing(editable: false, editing: false, revealed: false), index: nil, header: header, action: { _ in
|
return ContactsPeerItem(presentationData: ItemListPresentationData(presentationData), sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: .generalSearch, peer: .peer(peer: peer.peer, chatPeer: peer.peer), status: .addressName(suffixString), badge: badge, enabled: enabled, selection: .none, editing: ContactsPeerItemEditing(editable: false, editing: false, revealed: false), index: nil, header: header, action: { _ in
|
||||||
interaction.peerSelected(peer.peer, nil)
|
interaction.peerSelected(peer.peer, nil, nil)
|
||||||
}, contextAction: peerContextAction.flatMap { peerContextAction in
|
}, contextAction: peerContextAction.flatMap { peerContextAction in
|
||||||
return { node, gesture in
|
return { node, gesture in
|
||||||
peerContextAction(peer.peer, .search(nil), node, gesture)
|
peerContextAction(peer.peer, .search(nil), node, gesture)
|
||||||
@ -1209,9 +1213,9 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let chatListInteraction = ChatListNodeInteraction(activateSearch: {
|
let chatListInteraction = ChatListNodeInteraction(activateSearch: {
|
||||||
}, peerSelected: { [weak self] peer, _ in
|
}, peerSelected: { [weak self] peer, chatPeer, _ in
|
||||||
interaction.dismissInput()
|
interaction.dismissInput()
|
||||||
interaction.openPeer(peer, false)
|
interaction.openPeer(peer, chatPeer, false)
|
||||||
let _ = context.engine.peers.addRecentlySearchedPeer(peerId: peer.id).start()
|
let _ = context.engine.peers.addRecentlySearchedPeer(peerId: peer.id).start()
|
||||||
self?.listNode.clearHighlightAnimated(true)
|
self?.listNode.clearHighlightAnimated(true)
|
||||||
}, disabledPeerSelected: { _ in
|
}, disabledPeerSelected: { _ in
|
||||||
@ -1478,7 +1482,7 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|
|||||||
|
|
||||||
let firstTime = previousEntries == nil
|
let firstTime = previousEntries == nil
|
||||||
let transition = chatListSearchContainerPreparedRecentTransition(from: previousEntries ?? [], to: entries, context: context, presentationData: presentationData, filter: peersFilter, peerSelected: { peer in
|
let transition = chatListSearchContainerPreparedRecentTransition(from: previousEntries ?? [], to: entries, context: context, presentationData: presentationData, filter: peersFilter, peerSelected: { peer in
|
||||||
interaction.openPeer(peer, true)
|
interaction.openPeer(peer, nil, true)
|
||||||
let _ = context.engine.peers.addRecentlySearchedPeer(peerId: peer.id).start()
|
let _ = context.engine.peers.addRecentlySearchedPeer(peerId: peer.id).start()
|
||||||
self?.recentListNode.clearHighlightAnimated(true)
|
self?.recentListNode.clearHighlightAnimated(true)
|
||||||
}, disabledPeerSelected: { peer in
|
}, disabledPeerSelected: { peer in
|
||||||
@ -2324,7 +2328,7 @@ private final class ChatListSearchShimmerNode: ASDisplayNode {
|
|||||||
let timestamp1: Int32 = 100000
|
let timestamp1: Int32 = 100000
|
||||||
var peers = SimpleDictionary<PeerId, Peer>()
|
var peers = SimpleDictionary<PeerId, Peer>()
|
||||||
peers[peer1.id] = peer1
|
peers[peer1.id] = peer1
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
||||||
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in }, activateChatPreview: { _, _, gesture in
|
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in }, activateChatPreview: { _, _, gesture in
|
||||||
gesture?.cancel()
|
gesture?.cancel()
|
||||||
}, present: { _ in })
|
}, present: { _ in })
|
||||||
|
@ -127,9 +127,9 @@ public class ChatListItem: ListViewItem, ChatListSearchItemNeighbour {
|
|||||||
if let message = messages.last, let peer = peer.peer {
|
if let message = messages.last, let peer = peer.peer {
|
||||||
self.interaction.messageSelected(peer, message, promoInfo)
|
self.interaction.messageSelected(peer, message, promoInfo)
|
||||||
} else if let peer = peer.peer {
|
} else if let peer = peer.peer {
|
||||||
self.interaction.peerSelected(peer, promoInfo)
|
self.interaction.peerSelected(peer, nil, promoInfo)
|
||||||
} else if let peer = peer.peers[peer.peerId] {
|
} else if let peer = peer.peers[peer.peerId] {
|
||||||
self.interaction.peerSelected(peer, promoInfo)
|
self.interaction.peerSelected(peer, nil, promoInfo)
|
||||||
}
|
}
|
||||||
case let .groupReference(groupId, _, _, _, _):
|
case let .groupReference(groupId, _, _, _, _):
|
||||||
self.interaction.groupSelected(groupId)
|
self.interaction.groupSelected(groupId)
|
||||||
|
@ -53,7 +53,7 @@ public final class ChatListNodeInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let activateSearch: () -> Void
|
let activateSearch: () -> Void
|
||||||
let peerSelected: (Peer, ChatListNodeEntryPromoInfo?) -> Void
|
let peerSelected: (Peer, Peer?, ChatListNodeEntryPromoInfo?) -> Void
|
||||||
let disabledPeerSelected: (Peer) -> Void
|
let disabledPeerSelected: (Peer) -> Void
|
||||||
let togglePeerSelected: (Peer) -> Void
|
let togglePeerSelected: (Peer) -> Void
|
||||||
let togglePeersSelection: ([PeerEntry], Bool) -> Void
|
let togglePeersSelection: ([PeerEntry], Bool) -> Void
|
||||||
@ -75,7 +75,7 @@ public final class ChatListNodeInteraction {
|
|||||||
public var searchTextHighightState: String?
|
public var searchTextHighightState: String?
|
||||||
var highlightedChatLocation: ChatListHighlightedLocation?
|
var highlightedChatLocation: ChatListHighlightedLocation?
|
||||||
|
|
||||||
public init(activateSearch: @escaping () -> Void, peerSelected: @escaping (Peer, ChatListNodeEntryPromoInfo?) -> Void, disabledPeerSelected: @escaping (Peer) -> Void, togglePeerSelected: @escaping (Peer) -> Void, togglePeersSelection: @escaping ([PeerEntry], Bool) -> Void, additionalCategorySelected: @escaping (Int) -> Void, messageSelected: @escaping (Peer, Message, ChatListNodeEntryPromoInfo?) -> Void, groupSelected: @escaping (PeerGroupId) -> Void, addContact: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, setItemPinned: @escaping (PinnedItemId, Bool) -> Void, setPeerMuted: @escaping (PeerId, Bool) -> Void, deletePeer: @escaping (PeerId, Bool) -> Void, updatePeerGrouping: @escaping (PeerId, Bool) -> Void, togglePeerMarkedUnread: @escaping (PeerId, Bool) -> Void, toggleArchivedFolderHiddenByDefault: @escaping () -> Void, hidePsa: @escaping (PeerId) -> Void, activateChatPreview: @escaping (ChatListItem, ASDisplayNode, ContextGesture?) -> Void, present: @escaping (ViewController) -> Void) {
|
public init(activateSearch: @escaping () -> Void, peerSelected: @escaping (Peer, Peer?, ChatListNodeEntryPromoInfo?) -> Void, disabledPeerSelected: @escaping (Peer) -> Void, togglePeerSelected: @escaping (Peer) -> Void, togglePeersSelection: @escaping ([PeerEntry], Bool) -> Void, additionalCategorySelected: @escaping (Int) -> Void, messageSelected: @escaping (Peer, Message, ChatListNodeEntryPromoInfo?) -> Void, groupSelected: @escaping (PeerGroupId) -> Void, addContact: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, setItemPinned: @escaping (PinnedItemId, Bool) -> Void, setPeerMuted: @escaping (PeerId, Bool) -> Void, deletePeer: @escaping (PeerId, Bool) -> Void, updatePeerGrouping: @escaping (PeerId, Bool) -> Void, togglePeerMarkedUnread: @escaping (PeerId, Bool) -> Void, toggleArchivedFolderHiddenByDefault: @escaping () -> Void, hidePsa: @escaping (PeerId) -> Void, activateChatPreview: @escaping (ChatListItem, ASDisplayNode, ContextGesture?) -> Void, present: @escaping (ViewController) -> Void) {
|
||||||
self.activateSearch = activateSearch
|
self.activateSearch = activateSearch
|
||||||
self.peerSelected = peerSelected
|
self.peerSelected = peerSelected
|
||||||
self.disabledPeerSelected = disabledPeerSelected
|
self.disabledPeerSelected = disabledPeerSelected
|
||||||
@ -106,6 +106,18 @@ public final class ChatListNodePeerInputActivities {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func areFoundPeerArraysEqual(_ lhs: [(Peer, Peer?)], _ rhs: [(Peer, Peer?)]) -> Bool {
|
||||||
|
if lhs.count != rhs.count {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i in 0 ..< lhs.count {
|
||||||
|
if !arePeersEqual(lhs[i].0, rhs[i].0) || !arePeersEqual(lhs[i].1, rhs[i].1) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
public struct ChatListNodeState: Equatable {
|
public struct ChatListNodeState: Equatable {
|
||||||
public var presentationData: ChatListPresentationData
|
public var presentationData: ChatListPresentationData
|
||||||
public var editing: Bool
|
public var editing: Bool
|
||||||
@ -117,10 +129,10 @@ public struct ChatListNodeState: Equatable {
|
|||||||
public var archiveShouldBeTemporaryRevealed: Bool
|
public var archiveShouldBeTemporaryRevealed: Bool
|
||||||
public var selectedAdditionalCategoryIds: Set<Int>
|
public var selectedAdditionalCategoryIds: Set<Int>
|
||||||
public var hiddenPsaPeerId: PeerId?
|
public var hiddenPsaPeerId: PeerId?
|
||||||
public var foundPeers: [Peer]
|
public var foundPeers: [(Peer, Peer?)]
|
||||||
public var selectedPeerMap: [PeerId: Peer]
|
public var selectedPeerMap: [PeerId: Peer]
|
||||||
|
|
||||||
public init(presentationData: ChatListPresentationData, editing: Bool, peerIdWithRevealedOptions: PeerId?, selectedPeerIds: Set<PeerId>, foundPeers: [Peer], selectedPeerMap: [PeerId: Peer], selectedAdditionalCategoryIds: Set<Int>, peerInputActivities: ChatListNodePeerInputActivities?, pendingRemovalPeerIds: Set<PeerId>, pendingClearHistoryPeerIds: Set<PeerId>, archiveShouldBeTemporaryRevealed: Bool, hiddenPsaPeerId: PeerId?) {
|
public init(presentationData: ChatListPresentationData, editing: Bool, peerIdWithRevealedOptions: PeerId?, selectedPeerIds: Set<PeerId>, foundPeers: [(Peer, Peer?)], selectedPeerMap: [PeerId: Peer], selectedAdditionalCategoryIds: Set<Int>, peerInputActivities: ChatListNodePeerInputActivities?, pendingRemovalPeerIds: Set<PeerId>, pendingClearHistoryPeerIds: Set<PeerId>, archiveShouldBeTemporaryRevealed: Bool, hiddenPsaPeerId: PeerId?) {
|
||||||
self.presentationData = presentationData
|
self.presentationData = presentationData
|
||||||
self.editing = editing
|
self.editing = editing
|
||||||
self.peerIdWithRevealedOptions = peerIdWithRevealedOptions
|
self.peerIdWithRevealedOptions = peerIdWithRevealedOptions
|
||||||
@ -148,7 +160,7 @@ public struct ChatListNodeState: Equatable {
|
|||||||
if lhs.selectedPeerIds != rhs.selectedPeerIds {
|
if lhs.selectedPeerIds != rhs.selectedPeerIds {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if arePeerArraysEqual(lhs.foundPeers, rhs.foundPeers) {
|
if areFoundPeerArraysEqual(lhs.foundPeers, rhs.foundPeers) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if arePeerDictionariesEqual(lhs.selectedPeerMap, rhs.selectedPeerMap) {
|
if arePeerDictionariesEqual(lhs.selectedPeerMap, rhs.selectedPeerMap) {
|
||||||
@ -302,7 +314,7 @@ private func mappedInsertEntries(context: AccountContext, nodeInteraction: ChatL
|
|||||||
if editing {
|
if editing {
|
||||||
nodeInteraction.togglePeerSelected(chatPeer)
|
nodeInteraction.togglePeerSelected(chatPeer)
|
||||||
} else {
|
} else {
|
||||||
nodeInteraction.peerSelected(chatPeer, nil)
|
nodeInteraction.peerSelected(chatPeer, nil, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, disabledAction: { _ in
|
}, disabledAction: { _ in
|
||||||
@ -383,7 +395,7 @@ private func mappedUpdateEntries(context: AccountContext, nodeInteraction: ChatL
|
|||||||
if editing {
|
if editing {
|
||||||
nodeInteraction.togglePeerSelected(chatPeer)
|
nodeInteraction.togglePeerSelected(chatPeer)
|
||||||
} else {
|
} else {
|
||||||
nodeInteraction.peerSelected(chatPeer, nil)
|
nodeInteraction.peerSelected(chatPeer, nil, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, disabledAction: { _ in
|
}, disabledAction: { _ in
|
||||||
@ -602,7 +614,7 @@ public final class ChatListNode: ListView {
|
|||||||
if let strongSelf = self, let activateSearch = strongSelf.activateSearch {
|
if let strongSelf = self, let activateSearch = strongSelf.activateSearch {
|
||||||
activateSearch()
|
activateSearch()
|
||||||
}
|
}
|
||||||
}, peerSelected: { [weak self] peer, promoInfo in
|
}, peerSelected: { [weak self] peer, _, promoInfo in
|
||||||
if let strongSelf = self, let peerSelected = strongSelf.peerSelected {
|
if let strongSelf = self, let peerSelected = strongSelf.peerSelected {
|
||||||
peerSelected(peer, true, true, promoInfo)
|
peerSelected(peer, true, true, promoInfo)
|
||||||
}
|
}
|
||||||
|
@ -281,7 +281,7 @@ private func offsetPinnedIndex(_ index: ChatListIndex, offset: UInt16) -> ChatLi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, savedMessagesPeer: Peer?, foundPeers: [Peer], hideArchivedFolderByDefault: Bool, displayArchiveIntro: Bool, mode: ChatListNodeMode) -> (entries: [ChatListNodeEntry], loading: Bool) {
|
func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, savedMessagesPeer: Peer?, foundPeers: [(Peer, Peer?)], hideArchivedFolderByDefault: Bool, displayArchiveIntro: Bool, mode: ChatListNodeMode) -> (entries: [ChatListNodeEntry], loading: Bool) {
|
||||||
var result: [ChatListNodeEntry] = []
|
var result: [ChatListNodeEntry] = []
|
||||||
|
|
||||||
var pinnedIndexOffset: UInt16 = 0
|
var pinnedIndexOffset: UInt16 = 0
|
||||||
@ -300,7 +300,7 @@ func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState,
|
|||||||
|
|
||||||
var foundPeerIds = Set<PeerId>()
|
var foundPeerIds = Set<PeerId>()
|
||||||
for peer in foundPeers {
|
for peer in foundPeers {
|
||||||
foundPeerIds.insert(peer.id)
|
foundPeerIds.insert(peer.0.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if view.laterIndex == nil && savedMessagesPeer == nil {
|
if view.laterIndex == nil && savedMessagesPeer == nil {
|
||||||
@ -338,8 +338,13 @@ func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState,
|
|||||||
if !foundPeers.isEmpty {
|
if !foundPeers.isEmpty {
|
||||||
var foundPinningIndex: UInt16 = UInt16(foundPeers.count)
|
var foundPinningIndex: UInt16 = UInt16(foundPeers.count)
|
||||||
for peer in foundPeers.reversed() {
|
for peer in foundPeers.reversed() {
|
||||||
let messageIndex = MessageIndex(id: MessageId(peerId: peer.id, namespace: 0, id: 0), timestamp: 1)
|
var peers: [PeerId: Peer] = [peer.0.id: peer.0]
|
||||||
result.append(.PeerEntry(index: ChatListIndex(pinningIndex: foundPinningIndex, messageIndex: messageIndex), presentationData: state.presentationData, messages: [], readState: nil, isRemovedFromTotalUnreadCount: false, embeddedInterfaceState: nil, peer: RenderedPeer(peerId: peer.id, peers: SimpleDictionary([peer.id: peer])), presence: nil, summaryInfo: ChatListMessageTagSummaryInfo(), editing: state.editing, hasActiveRevealControls: false, selected: state.selectedPeerIds.contains(peer.id), inputActivities: nil, promoInfo: nil, hasFailedMessages: false, isContact: false))
|
if let chatPeer = peer.1 {
|
||||||
|
peers[chatPeer.id] = chatPeer
|
||||||
|
}
|
||||||
|
|
||||||
|
let messageIndex = MessageIndex(id: MessageId(peerId: peer.0.id, namespace: 0, id: 0), timestamp: 1)
|
||||||
|
result.append(.PeerEntry(index: ChatListIndex(pinningIndex: foundPinningIndex, messageIndex: messageIndex), presentationData: state.presentationData, messages: [], readState: nil, isRemovedFromTotalUnreadCount: false, embeddedInterfaceState: nil, peer: RenderedPeer(peerId: peer.0.id, peers: SimpleDictionary(peers)), presence: nil, summaryInfo: ChatListMessageTagSummaryInfo(), editing: state.editing, hasActiveRevealControls: false, selected: state.selectedPeerIds.contains(peer.0.id), inputActivities: nil, promoInfo: nil, hasFailedMessages: false, isContact: false))
|
||||||
if foundPinningIndex != 0 {
|
if foundPinningIndex != 0 {
|
||||||
foundPinningIndex -= 1
|
foundPinningIndex -= 1
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ public final class HashtagSearchController: TelegramBaseController {
|
|||||||
return result.messages.map({ .message($0, RenderedPeer(message: $0), result.readStates[$0.id.peerId], chatListPresentationData, result.totalCount, nil, false) })
|
return result.messages.map({ .message($0, RenderedPeer(message: $0), result.readStates[$0.id.peerId], chatListPresentationData, result.totalCount, nil, false) })
|
||||||
}
|
}
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {
|
let interaction = ChatListNodeInteraction(activateSearch: {
|
||||||
}, peerSelected: { _, _ in
|
}, peerSelected: { _, _, _ in
|
||||||
}, disabledPeerSelected: { _ in
|
}, disabledPeerSelected: { _ in
|
||||||
}, togglePeerSelected: { _ in
|
}, togglePeerSelected: { _ in
|
||||||
}, togglePeersSelection: { _, _ in
|
}, togglePeersSelection: { _, _ in
|
||||||
|
@ -273,6 +273,7 @@ private final class SemanticStatusNodeIconContext: SemanticStatusNodeStateContex
|
|||||||
strongSelf.requestUpdate()
|
strongSelf.requestUpdate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.animationNode?.enqueueState(self.icon == .play ? .play : .pause, animated: false)
|
||||||
self.iconImage = self.animationNode?.image
|
self.iconImage = self.animationNode?.image
|
||||||
self.iconOffset = 1.5
|
self.iconOffset = 1.5
|
||||||
}
|
}
|
||||||
|
@ -210,7 +210,7 @@ private final class TextSizeSelectionControllerNode: ASDisplayNode, UIScrollView
|
|||||||
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
|
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
|
||||||
var items: [ChatListItem] = []
|
var items: [ChatListItem] = []
|
||||||
|
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
||||||
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in
|
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in
|
||||||
}, activateChatPreview: { _, _, gesture in
|
}, activateChatPreview: { _, _, gesture in
|
||||||
gesture?.cancel()
|
gesture?.cancel()
|
||||||
|
@ -778,7 +778,7 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
|
|||||||
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
|
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
|
||||||
var items: [ChatListItem] = []
|
var items: [ChatListItem] = []
|
||||||
|
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
||||||
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in
|
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in
|
||||||
}, activateChatPreview: { _, _, gesture in
|
}, activateChatPreview: { _, _, gesture in
|
||||||
gesture?.cancel()
|
gesture?.cancel()
|
||||||
|
@ -355,7 +355,7 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
|
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
|
||||||
var items: [ChatListItem] = []
|
var items: [ChatListItem] = []
|
||||||
|
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
let interaction = ChatListNodeInteraction(activateSearch: {}, peerSelected: { _, _, _ in }, disabledPeerSelected: { _ in }, togglePeerSelected: { _ in }, togglePeersSelection: { _, _ in }, additionalCategorySelected: { _ in
|
||||||
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in
|
}, messageSelected: { _, _, _ in}, groupSelected: { _ in }, addContact: { _ in }, setPeerIdWithRevealedOptions: { _, _ in }, setItemPinned: { _, _ in }, setPeerMuted: { _, _ in }, deletePeer: { _, _ in }, updatePeerGrouping: { _, _ in }, togglePeerMarkedUnread: { _, _ in}, toggleArchivedFolderHiddenByDefault: {}, hidePsa: { _ in
|
||||||
}, activateChatPreview: { _, _, gesture in
|
}, activateChatPreview: { _, _, gesture in
|
||||||
gesture?.cancel()
|
gesture?.cancel()
|
||||||
|
@ -10925,7 +10925,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Forward_ErrorDisabledForChat, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root))
|
controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Forward_ErrorDisabledForChat, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root))
|
||||||
}
|
}
|
||||||
controller.multiplePeersSelected = { [weak self, weak controller] peers, messageText, mode in
|
controller.multiplePeersSelected = { [weak self, weak controller] peers, peerMap, messageText, mode in
|
||||||
guard let strongSelf = self, let strongController = controller else {
|
guard let strongSelf = self, let strongController = controller else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -10951,6 +10951,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
})
|
})
|
||||||
|
|
||||||
let commit: ([EnqueueMessage]) -> Void = { result in
|
let commit: ([EnqueueMessage]) -> Void = { result in
|
||||||
|
var displayPeers: [Peer] = []
|
||||||
for peer in peers {
|
for peer in peers {
|
||||||
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peer.id, messages: result)
|
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peer.id, messages: result)
|
||||||
|> deliverOnMainQueue).start(next: { messageIds in
|
|> deliverOnMainQueue).start(next: { messageIds in
|
||||||
@ -10977,30 +10978,38 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
if let secretPeer = peer as? TelegramSecretChat {
|
||||||
let text: String
|
if let peer = peerMap[secretPeer.regularPeerId] {
|
||||||
var savedMessages = false
|
displayPeers.append(peer)
|
||||||
if peers.count == 1, let peerId = peers.first?.id, peerId == strongSelf.context.account.peerId {
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many
|
|
||||||
savedMessages = true
|
|
||||||
} else {
|
|
||||||
if peers.count == 1, let peer = peers.first {
|
|
||||||
let peerName = peer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string : presentationData.strings.Conversation_ForwardTooltip_Chat_Many(peerName).string
|
|
||||||
} else if peers.count == 2, let firstPeer = peers.first, let secondPeer = peers.last {
|
|
||||||
let firstPeerName = firstPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
let secondPeerName = secondPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string : presentationData.strings.Conversation_ForwardTooltip_TwoChats_Many(firstPeerName, secondPeerName).string
|
|
||||||
} else if let peer = peers.first {
|
|
||||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(peers.count - 1)").string : presentationData.strings.Conversation_ForwardTooltip_ManyChats_Many(peerName, "\(peers.count - 1)").string
|
|
||||||
} else {
|
|
||||||
text = ""
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
displayPeers.append(peer)
|
||||||
}
|
}
|
||||||
|
|
||||||
strongSelf.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: savedMessages, text: text), elevatedLayout: false, animateInAsReplacement: true, action: { _ in return false }), in: .current)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
let text: String
|
||||||
|
var savedMessages = false
|
||||||
|
if displayPeers.count == 1, let peerId = displayPeers.first?.id, peerId == strongSelf.context.account.peerId {
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many
|
||||||
|
savedMessages = true
|
||||||
|
} else {
|
||||||
|
if displayPeers.count == 1, let peer = displayPeers.first {
|
||||||
|
let peerName = peer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string : presentationData.strings.Conversation_ForwardTooltip_Chat_Many(peerName).string
|
||||||
|
} else if displayPeers.count == 2, let firstPeer = displayPeers.first, let secondPeer = displayPeers.last {
|
||||||
|
let firstPeerName = firstPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
let secondPeerName = secondPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string : presentationData.strings.Conversation_ForwardTooltip_TwoChats_Many(firstPeerName, secondPeerName).string
|
||||||
|
} else if let peer = displayPeers.first {
|
||||||
|
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(displayPeers.count - 1)").string : presentationData.strings.Conversation_ForwardTooltip_ManyChats_Many(peerName, "\(displayPeers.count - 1)").string
|
||||||
|
} else {
|
||||||
|
text = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strongSelf.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: savedMessages, text: text), elevatedLayout: false, animateInAsReplacement: true, action: { _ in return false }), in: .current)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch mode {
|
switch mode {
|
||||||
|
@ -171,7 +171,7 @@ class ChatSearchResultsControllerNode: ViewControllerTracingNode, UIScrollViewDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
let interaction = ChatListNodeInteraction(activateSearch: {
|
let interaction = ChatListNodeInteraction(activateSearch: {
|
||||||
}, peerSelected: { _, _ in
|
}, peerSelected: { _, _, _ in
|
||||||
}, disabledPeerSelected: { _ in
|
}, disabledPeerSelected: { _ in
|
||||||
}, togglePeerSelected: { _ in
|
}, togglePeerSelected: { _ in
|
||||||
}, togglePeersSelection: { _, _ in
|
}, togglePeersSelection: { _, _ in
|
||||||
|
@ -5649,7 +5649,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
func forwardMessages(messageIds: Set<MessageId>?) {
|
func forwardMessages(messageIds: Set<MessageId>?) {
|
||||||
if let messageIds = messageIds ?? self.state.selectedMessageIds, !messageIds.isEmpty {
|
if let messageIds = messageIds ?? self.state.selectedMessageIds, !messageIds.isEmpty {
|
||||||
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled], multipleSelection: true))
|
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled], multipleSelection: true))
|
||||||
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, messageText, mode in
|
peerSelectionController.multiplePeersSelected = { [weak self, weak peerSelectionController] peers, peerMap, messageText, mode in
|
||||||
guard let strongSelf = self, let strongController = peerSelectionController else {
|
guard let strongSelf = self, let strongController = peerSelectionController else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -5674,6 +5674,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
return .forward(source: messageId, grouping: .auto, attributes: [], correlationId: nil)
|
return .forward(source: messageId, grouping: .auto, attributes: [], correlationId: nil)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var displayPeers: [Peer] = []
|
||||||
for peer in peers {
|
for peer in peers {
|
||||||
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peer.id, messages: result)
|
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peer.id, messages: result)
|
||||||
|> deliverOnMainQueue).start(next: { messageIds in
|
|> deliverOnMainQueue).start(next: { messageIds in
|
||||||
@ -5700,30 +5701,38 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
if let secretPeer = peer as? TelegramSecretChat {
|
||||||
let text: String
|
if let peer = peerMap[secretPeer.regularPeerId] {
|
||||||
var savedMessages = false
|
displayPeers.append(peer)
|
||||||
if peers.count == 1, let peerId = peers.first?.id, peerId == strongSelf.context.account.peerId {
|
|
||||||
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many
|
|
||||||
savedMessages = true
|
|
||||||
} else {
|
|
||||||
if peers.count == 1, let peer = peers.first {
|
|
||||||
let peerName = peer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string : presentationData.strings.Conversation_ForwardTooltip_Chat_Many(peerName).string
|
|
||||||
} else if peers.count == 2, let firstPeer = peers.first, let secondPeer = peers.last {
|
|
||||||
let firstPeerName = firstPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
let secondPeerName = secondPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string : presentationData.strings.Conversation_ForwardTooltip_TwoChats_Many(firstPeerName, secondPeerName).string
|
|
||||||
} else if let peer = peers.first {
|
|
||||||
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
|
||||||
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(peers.count - 1)").string : presentationData.strings.Conversation_ForwardTooltip_ManyChats_Many(peerName, "\(peers.count - 1)").string
|
|
||||||
} else {
|
|
||||||
text = ""
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
displayPeers.append(peer)
|
||||||
}
|
}
|
||||||
|
|
||||||
strongSelf.controller?.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: savedMessages, text: text), elevatedLayout: false, animateInAsReplacement: true, action: { _ in return false }), in: .current)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
let text: String
|
||||||
|
var savedMessages = false
|
||||||
|
if displayPeers.count == 1, let peerId = displayPeers.first?.id, peerId == strongSelf.context.account.peerId {
|
||||||
|
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many
|
||||||
|
savedMessages = true
|
||||||
|
} else {
|
||||||
|
if displayPeers.count == 1, let peer = displayPeers.first {
|
||||||
|
let peerName = peer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_Chat_One(peerName).string : presentationData.strings.Conversation_ForwardTooltip_Chat_Many(peerName).string
|
||||||
|
} else if displayPeers.count == 2, let firstPeer = displayPeers.first, let secondPeer = displayPeers.last {
|
||||||
|
let firstPeerName = firstPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : firstPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
let secondPeerName = secondPeer.id == strongSelf.context.account.peerId ? presentationData.strings.DialogList_SavedMessages : secondPeer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_TwoChats_One(firstPeerName, secondPeerName).string : presentationData.strings.Conversation_ForwardTooltip_TwoChats_Many(firstPeerName, secondPeerName).string
|
||||||
|
} else if let peer = displayPeers.first {
|
||||||
|
let peerName = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
text = messageIds.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_ManyChats_One(peerName, "\(displayPeers.count - 1)").string : presentationData.strings.Conversation_ForwardTooltip_ManyChats_Many(peerName, "\(displayPeers.count - 1)").string
|
||||||
|
} else {
|
||||||
|
text = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strongSelf.controller?.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: savedMessages, text: text), elevatedLayout: false, animateInAsReplacement: true, action: { _ in return false }), in: .current)
|
||||||
}
|
}
|
||||||
peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peer in
|
peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peer in
|
||||||
let peerId = peer.id
|
let peerId = peer.id
|
||||||
|
@ -19,7 +19,7 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
|
|||||||
private var customTitle: String?
|
private var customTitle: String?
|
||||||
|
|
||||||
public var peerSelected: ((Peer) -> Void)?
|
public var peerSelected: ((Peer) -> Void)?
|
||||||
public var multiplePeersSelected: (([Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)?
|
public var multiplePeersSelected: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)?
|
||||||
private let filter: ChatListNodePeersFilter
|
private let filter: ChatListNodePeersFilter
|
||||||
|
|
||||||
private let attemptSelection: ((Peer) -> Void)?
|
private let attemptSelection: ((Peer) -> Void)?
|
||||||
@ -158,8 +158,8 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
|
|||||||
|
|
||||||
self.peerSelectionNode.navigationBar = self.navigationBar
|
self.peerSelectionNode.navigationBar = self.navigationBar
|
||||||
|
|
||||||
self.peerSelectionNode.requestSend = { [weak self] peers, text, mode in
|
self.peerSelectionNode.requestSend = { [weak self] peers, peerMap, text, mode in
|
||||||
self?.multiplePeersSelected?(peers, text, mode)
|
self?.multiplePeersSelected?(peers, peerMap, text, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.peerSelectionNode.requestDeactivateSearch = { [weak self] in
|
self.peerSelectionNode.requestDeactivateSearch = { [weak self] in
|
||||||
|
@ -56,7 +56,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
|||||||
var requestOpenDisabledPeer: ((Peer) -> Void)?
|
var requestOpenDisabledPeer: ((Peer) -> Void)?
|
||||||
var requestOpenPeerFromSearch: ((Peer) -> Void)?
|
var requestOpenPeerFromSearch: ((Peer) -> Void)?
|
||||||
var requestOpenMessageFromSearch: ((Peer, MessageId) -> Void)?
|
var requestOpenMessageFromSearch: ((Peer, MessageId) -> Void)?
|
||||||
var requestSend: (([Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)?
|
var requestSend: (([Peer], [PeerId: Peer], NSAttributedString, PeerSelectionControllerSendMode) -> Void)?
|
||||||
|
|
||||||
private var presentationData: PresentationData
|
private var presentationData: PresentationData
|
||||||
private var presentationDataDisposable: Disposable?
|
private var presentationDataDisposable: Disposable?
|
||||||
@ -348,13 +348,15 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
|||||||
let selectedContactPeers = strongSelf.contactListNode?.selectedPeers ?? []
|
let selectedContactPeers = strongSelf.contactListNode?.selectedPeers ?? []
|
||||||
let effectiveInputText = strongSelf.presentationInterfaceState.interfaceState.composeInputState.inputText
|
let effectiveInputText = strongSelf.presentationInterfaceState.interfaceState.composeInputState.inputText
|
||||||
var selectedPeers: [Peer] = []
|
var selectedPeers: [Peer] = []
|
||||||
|
var selectedPeerMap: [PeerId: Peer] = [:]
|
||||||
for contactPeer in selectedContactPeers {
|
for contactPeer in selectedContactPeers {
|
||||||
if case let .peer(peer, _, _) = contactPeer {
|
if case let .peer(peer, _, _) = contactPeer {
|
||||||
selectedPeers.append(peer)
|
selectedPeers.append(peer)
|
||||||
|
selectedPeerMap[peer.id] = peer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !selectedPeers.isEmpty {
|
if !selectedPeers.isEmpty {
|
||||||
strongSelf.requestSend?(selectedPeers, effectiveInputText, mode)
|
strongSelf.requestSend?(selectedPeers, selectedPeerMap, effectiveInputText, mode)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var selectedPeerIds: [PeerId] = []
|
var selectedPeerIds: [PeerId] = []
|
||||||
@ -372,7 +374,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
|||||||
selectedPeers.append(peer)
|
selectedPeers.append(peer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strongSelf.requestSend?(selectedPeers, effectiveInputText, mode)
|
strongSelf.requestSend?(selectedPeers, selectedPeerMap, effectiveInputText, mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -492,7 +494,7 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if self.chatListNode.supernode != nil {
|
if self.chatListNode.supernode != nil {
|
||||||
self.searchDisplayController = SearchDisplayController(presentationData: self.presentationData, contentNode: ChatListSearchContainerNode(context: self.context, filter: self.filter, groupId: .root, displaySearchFilters: false, openPeer: { [weak self] peer, _ in
|
self.searchDisplayController = SearchDisplayController(presentationData: self.presentationData, contentNode: ChatListSearchContainerNode(context: self.context, filter: self.filter, groupId: .root, displaySearchFilters: false, openPeer: { [weak self] peer, chatPeer, _ in
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -505,15 +507,18 @@ final class PeerSelectionControllerNode: ASDisplayNode {
|
|||||||
var foundPeers = state.foundPeers
|
var foundPeers = state.foundPeers
|
||||||
var selectedPeerMap = state.selectedPeerMap
|
var selectedPeerMap = state.selectedPeerMap
|
||||||
selectedPeerMap[peer.id] = peer
|
selectedPeerMap[peer.id] = peer
|
||||||
|
if peer is TelegramSecretChat, let chatPeer = chatPeer {
|
||||||
|
selectedPeerMap[chatPeer.id] = chatPeer
|
||||||
|
}
|
||||||
var exists = false
|
var exists = false
|
||||||
for foundPeer in foundPeers {
|
for foundPeer in foundPeers {
|
||||||
if peer.id == foundPeer.id {
|
if peer.id == foundPeer.0.id {
|
||||||
exists = true
|
exists = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !exists {
|
if !exists {
|
||||||
foundPeers.insert(peer, at: 0)
|
foundPeers.insert((peer, chatPeer), at: 0)
|
||||||
}
|
}
|
||||||
if state.selectedPeerIds.contains(peer.id) {
|
if state.selectedPeerIds.contains(peer.id) {
|
||||||
state.selectedPeerIds.remove(peer.id)
|
state.selectedPeerIds.remove(peer.id)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user