mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-31 15:37:01 +00:00
Various fixes
This commit is contained in:
parent
40780242fe
commit
c353a04323
@ -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)
|
||||
|
@ -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
|
||||
))))
|
||||
|
Loading…
x
Reference in New Issue
Block a user