Various fixes

This commit is contained in:
Ilya Laktyushin 2025-05-23 11:17:09 +02:00
parent 40780242fe
commit c353a04323
2 changed files with 72 additions and 10 deletions

View File

@ -529,12 +529,10 @@ private final class AdminUserActionsSheetComponent: Component {
selectAll = true
} else if case let .known(peerId) = cachedData.linkedDiscussionPeerId, let _ = peerId {
selectAll = true
} else if case let .channel(channel) = component.chatPeer, let _ = channel.addressName {
selectAll = true
}
}
if selectAll {
if selectAll && !"".isEmpty {
var selectedPeers = Set<EnginePeer.Id>()
for peer in component.peers {
selectedPeers.insert(peer.peer.id)

View File

@ -68,6 +68,7 @@ final class ForumSettingsScreenComponent: Component {
private var peer: EnginePeer?
private var peerDisposable: Disposable?
private var peerIdPromise = ValuePromise<EnginePeer.Id>()
private var isOn = false
private var mode: ForumModeComponent.Mode = .tabs
@ -140,6 +141,65 @@ final class ForumSettingsScreenComponent: Component {
transition.setAlpha(view: navigationTitleView, alpha: 1.0)
}
}
func toggleTopicsEnabled(_ enabled: Bool) {
guard let component = self.component, let peer = self.peer else {
return
}
self.isOn = enabled
let displayForumAsTabs = self.mode == .tabs
if self.isOn {
if case .legacyGroup = peer {
let context = component.context
let signal: Signal<EnginePeer.Id?, NoError> = context.engine.peers.convertGroupToSupergroup(peerId: peer.id, additionalProcessing: { upgradedPeerId -> Signal<Never, NoError> in
return context.engine.peers.setChannelForumMode(id: upgradedPeerId, isForum: true, displayForumAsTabs: false)
})
|> map(Optional.init)
|> `catch` { [weak self] error -> Signal<PeerId?, NoError> in
guard let self, let controller = self.environment?.controller() else {
return .single(nil)
}
switch error {
case .tooManyChannels:
Queue.mainQueue().async {
let oldChannelsController = context.sharedContext.makeOldChannelsController(context: context, updatedPresentationData: nil, intent: .upgrade, completed: { result in
})
controller.push(oldChannelsController)
}
default:
break
}
return .single(nil)
}
|> mapToSignal { upgradedPeerId -> Signal<PeerId?, NoError> in
guard let upgradedPeerId = upgradedPeerId else {
return .single(nil)
}
return .single(upgradedPeerId)
}
|> deliverOnMainQueue
let _ = signal.startStandalone(next: { [weak self] resultPeerId in
guard let self else {
return
}
if let resultPeerId {
self.peerIdPromise.set(resultPeerId)
} else {
self.isOn = false
self.state?.updated(transition: .easeInOut(duration: 0.2))
}
})
} else {
let _ = component.context.engine.peers.setChannelForumMode(id: peer.id, isForum: true, displayForumAsTabs: displayForumAsTabs).startStandalone()
}
} else {
let _ = component.context.engine.peers.setChannelForumMode(id: peer.id, isForum: false, displayForumAsTabs: displayForumAsTabs).startStandalone()
}
self.state?.updated(transition: .spring(duration: 0.4))
}
func update(component: ForumSettingsScreenComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<EnvironmentType>, transition: ComponentTransition) -> CGSize {
self.isUpdating = true
@ -148,7 +208,12 @@ final class ForumSettingsScreenComponent: Component {
}
if self.component == nil {
self.peerDisposable = (component.context.engine.data.subscribe(TelegramEngine.EngineData.Item.Peer.Peer(id: component.peerId))
self.peerIdPromise.set(component.peerId)
self.peerDisposable = (self.peerIdPromise.get()
|> mapToSignal { peerId in
component.context.engine.data.subscribe(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId))
}
|> deliverOnMainQueue).start(next: { [weak self] peer in
guard let self else {
return
@ -156,7 +221,9 @@ final class ForumSettingsScreenComponent: Component {
self.peer = peer
if case let .channel(channel) = peer {
self.isOn = channel.flags.contains(.isForum)
self.mode = channel.flags.contains(.displayForumAsTabs) ? .tabs : .list
if self.isOn {
self.mode = channel.flags.contains(.displayForumAsTabs) ? .tabs : .list
}
}
self.state?.updated()
})
@ -285,13 +352,10 @@ final class ForumSettingsScreenComponent: Component {
))),
], alignment: .left, spacing: 2.0)),
accessory: .toggle(ListActionItemComponent.Toggle(style: .regular, isOn: self.isOn, action: { [weak self] value in
guard let self, let component = self.component else {
guard let self else {
return
}
self.isOn = !self.isOn
let displayForumAsTabs = self.mode == .tabs
let _ = component.context.engine.peers.setChannelForumMode(id: component.peerId, isForum: self.isOn, displayForumAsTabs: displayForumAsTabs).startStandalone()
self.state?.updated(transition: .spring(duration: 0.4))
self.toggleTopicsEnabled(value)
})),
action: nil
))))