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
}
guard let peerSelected = self.peerSelected else {
return
}
if case let .channel(peer) = peer, peer.isForumOrMonoForum, threadId == nil, self.selectForumThreads {
let mainPeer: Signal<EnginePeer?, NoError> let mainPeer: Signal<EnginePeer?, NoError>
if peer.isMonoForum, let linkedMonoforumId = peer.linkedMonoforumId { if peer.isMonoForum, let linkedMonoforumId = peer.linkedMonoforumId {
mainPeer = strongSelf.context.engine.data.get( mainPeer = self.context.engine.data.get(
TelegramEngine.EngineData.Item.Peer.Peer(id: linkedMonoforumId) TelegramEngine.EngineData.Item.Peer.Peer(id: linkedMonoforumId)
) )
} else { } else {
mainPeer = .single(nil) mainPeer = .single(nil)
} }
let _ = (mainPeer |> deliverOnMainQueue).startStandalone(next: { [weak strongSelf] mainPeer in let _ = (mainPeer |> deliverOnMainQueue).startStandalone(next: { [weak self] mainPeer in
guard let strongSelf else { guard let self else {
return
}
guard case let .channel(mainChannel) = mainPeer else {
return return
} }
let displayPeer = mainPeer ?? EnginePeer(peer) if mainChannel.hasPermission(.manageDirect) {
let displayPeer = EnginePeer(mainChannel)
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,14 +323,16 @@ 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 {
peerSelected(.channel(peer), threadId)
}
}) })
} else { } else {
peerSelected(peer, threadId) peerSelected(peer, threadId)
} }
} }
}
self.peerSelectionNode.requestOpenDisabledPeer = { [weak self] peer, threadId, reason in self.peerSelectionNode.requestOpenDisabledPeer = { [weak self] peer, threadId, reason in
if let strongSelf = self { if let strongSelf = self {