Fix forward to monoforum

This commit is contained in:
Isaac 2025-06-17 18:35:54 +04:00
parent 6dc45113d2
commit d1ad1668c4

View File

@ -275,36 +275,46 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
} }
self.peerSelectionNode.requestOpenPeer = { [weak self] peer, threadId in self.peerSelectionNode.requestOpenPeer = { [weak self] peer, threadId in
if let strongSelf = self, let peerSelected = strongSelf.peerSelected { guard let self else {
if case let .channel(peer) = peer, peer.isForumOrMonoForum, threadId == nil, strongSelf.selectForumThreads { return
let mainPeer: Signal<EnginePeer?, NoError> }
if peer.isMonoForum, let linkedMonoforumId = peer.linkedMonoforumId { guard let peerSelected = self.peerSelected else {
mainPeer = strongSelf.context.engine.data.get( return
TelegramEngine.EngineData.Item.Peer.Peer(id: linkedMonoforumId) }
)
} else { if case let .channel(peer) = peer, peer.isForumOrMonoForum, threadId == nil, self.selectForumThreads {
mainPeer = .single(nil) let mainPeer: Signal<EnginePeer?, NoError>
if peer.isMonoForum, let linkedMonoforumId = peer.linkedMonoforumId {
mainPeer = self.context.engine.data.get(
TelegramEngine.EngineData.Item.Peer.Peer(id: linkedMonoforumId)
)
} else {
mainPeer = .single(nil)
}
let _ = (mainPeer |> deliverOnMainQueue).startStandalone(next: { [weak self] mainPeer in
guard let self else {
return
}
guard case let .channel(mainChannel) = mainPeer else {
return
} }
let _ = (mainPeer |> deliverOnMainQueue).startStandalone(next: { [weak strongSelf] mainPeer in if mainChannel.hasPermission(.manageDirect) {
guard let strongSelf else { let displayPeer = EnginePeer(mainChannel)
return
}
let displayPeer = mainPeer ?? EnginePeer(peer)
let controller = PeerSelectionControllerImpl( let controller = PeerSelectionControllerImpl(
PeerSelectionControllerParams( PeerSelectionControllerParams(
context: strongSelf.context, context: self.context,
updatedPresentationData: nil, updatedPresentationData: nil,
filter: strongSelf.filter, filter: self.filter,
forumPeerId: (peer.id, peer.isMonoForum), forumPeerId: (peer.id, peer.isMonoForum),
hasFilters: false, hasFilters: false,
hasChatListSelector: false, hasChatListSelector: false,
hasContactSelector: false, hasContactSelector: false,
hasGlobalSearch: false, hasGlobalSearch: false,
title: displayPeer.compactDisplayTitle, title: displayPeer.compactDisplayTitle,
attemptSelection: strongSelf.attemptSelection, attemptSelection: self.attemptSelection,
createNewGroup: nil, createNewGroup: nil,
pretendPresentedInModal: false, pretendPresentedInModal: false,
multipleSelection: false, multipleSelection: false,
@ -313,12 +323,14 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon
selectForumThreads: false selectForumThreads: false
) )
) )
controller.peerSelected = strongSelf.peerSelected controller.peerSelected = self.peerSelected
strongSelf.push(controller) self.push(controller)
}) } else {
} else { peerSelected(.channel(peer), threadId)
peerSelected(peer, threadId) }
} })
} else {
peerSelected(peer, threadId)
} }
} }