From e8c4f28bec78993a1b4be4e4ec234558cd0fc443 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Fri, 27 Dec 2019 18:51:17 +0400 Subject: [PATCH] Separate errors when adding admins to upgrading groups --- .../Sources/ChannelAdminController.swift | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/submodules/PeerInfoUI/Sources/ChannelAdminController.swift b/submodules/PeerInfoUI/Sources/ChannelAdminController.swift index b2ecbb206b..f26291b8a4 100644 --- a/submodules/PeerInfoUI/Sources/ChannelAdminController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelAdminController.swift @@ -1121,22 +1121,31 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi dismissImpl?() })) } else if updateFlags != defaultFlags || updateRank != nil { + enum WrappedUpdateChannelAdminRightsError { + case direct(UpdateChannelAdminRightsError) + case conversionTooManyChannels + case conversionFailed + } + let signal = convertGroupToSupergroup(account: context.account, peerId: peerId) |> map(Optional.init) - |> `catch` { error -> Signal in + |> `catch` { error -> Signal in switch error { case .tooManyChannels: - return .fail(.addMemberError(.tooMuchJoined)) + return .fail(.conversionTooManyChannels) default: - return .fail(.generic) + return .fail(.conversionFailed) } } - |> mapToSignal { upgradedPeerId -> Signal in + |> mapToSignal { upgradedPeerId -> Signal in guard let upgradedPeerId = upgradedPeerId else { - return .fail(.generic) + return .fail(.conversionFailed) } return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: updateRank) - |> mapToSignal { _ -> Signal in + |> mapError { error -> WrappedUpdateChannelAdminRightsError in + return .direct(error) + } + |> mapToSignal { _ -> Signal in return .complete() } |> then(.single(upgradedPeerId)) @@ -1157,15 +1166,19 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi return current.withUpdatedUpdating(false) } - if case let .addMemberError(error) = error { - var text = presentationData.strings.Login_UnknownError - if case .restricted = error, let admin = adminView.peers[adminView.peerId] { - text = presentationData.strings.Privacy_GroupsAndChannels_InviteToGroupError(admin.compactDisplayTitle, admin.compactDisplayTitle).0 - } else if case .tooMuchJoined = error { - pushControllerImpl?(oldChannelsController(context: context, intent: .upgrade)) - return + switch error { + case let .direct(error): + if case let .addMemberError(error) = error { + var text = presentationData.strings.Login_UnknownError + if case .restricted = error, let admin = adminView.peers[adminView.peerId] { + text = presentationData.strings.Privacy_GroupsAndChannels_InviteToGroupError(admin.compactDisplayTitle, admin.compactDisplayTitle).0 + } else if case .tooMuchJoined = error { + text = presentationData.strings.Invite_ChannelsTooMuch + } + presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) } - presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + case .conversionFailed, .conversionTooManyChannels: + pushControllerImpl?(oldChannelsController(context: context, intent: .upgrade)) } dismissImpl?()