diff --git a/submodules/InviteLinksUI/Sources/InviteLinkListController.swift b/submodules/InviteLinksUI/Sources/InviteLinkListController.swift index 1c4bab45a5..f93ae4943e 100644 --- a/submodules/InviteLinksUI/Sources/InviteLinkListController.swift +++ b/submodules/InviteLinksUI/Sources/InviteLinkListController.swift @@ -563,35 +563,37 @@ public func inviteLinkListController(context: AccountContext, peerId: PeerId, ad }))) if !invite.isRevoked { - items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextShare, icon: { theme in - return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Forward"), color: theme.contextMenu.primaryColor) - }, action: { _, f in - f(.default) - - let shareController = ShareController(context: context, subject: .url(invite.link)) - presentControllerImpl?(shareController, nil) - }))) - - items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextGetQRCode, icon: { theme in - return generateTintedImage(image: UIImage(bundleImageName: "Wallet/QrIcon"), color: theme.contextMenu.primaryColor) - }, action: { _, f in - f(.default) + if !invitationAvailability(invite).isZero { + items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextShare, icon: { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Forward"), color: theme.contextMenu.primaryColor) + }, action: { _, f in + f(.default) - let _ = (context.account.postbox.loadedPeerWithId(peerId) - |> deliverOnMainQueue).start(next: { peer in - let isGroup: Bool - if let peer = peer as? TelegramChannel, case .broadcast = peer.info { - isGroup = false - } else { - isGroup = true - } - Queue.mainQueue().after(0.2) { - let controller = InviteLinkQRCodeController(context: context, invite: invite, isGroup: isGroup) - presentControllerImpl?(controller, nil) - } - }) - }))) - + let shareController = ShareController(context: context, subject: .url(invite.link)) + presentControllerImpl?(shareController, nil) + }))) + + items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextGetQRCode, icon: { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Wallet/QrIcon"), color: theme.contextMenu.primaryColor) + }, action: { _, f in + f(.default) + + let _ = (context.account.postbox.loadedPeerWithId(peerId) + |> deliverOnMainQueue).start(next: { peer in + let isGroup: Bool + if let peer = peer as? TelegramChannel, case .broadcast = peer.info { + isGroup = false + } else { + isGroup = true + } + Queue.mainQueue().after(0.2) { + let controller = InviteLinkQRCodeController(context: context, invite: invite, isGroup: isGroup) + presentControllerImpl?(controller, nil) + } + }) + }))) + } + items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextEdit, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Edit"), color: theme.contextMenu.primaryColor) }, action: { _, f in diff --git a/submodules/InviteLinksUI/Sources/InviteLinkViewController.swift b/submodules/InviteLinksUI/Sources/InviteLinkViewController.swift index c559b1c1fa..4308715560 100644 --- a/submodules/InviteLinksUI/Sources/InviteLinkViewController.swift +++ b/submodules/InviteLinksUI/Sources/InviteLinkViewController.swift @@ -487,23 +487,25 @@ public final class InviteLinkViewController: ViewController { self?.controller?.present(controller, in: .window(.root)) }))) } else { - items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextGetQRCode, icon: { theme in - return generateTintedImage(image: UIImage(bundleImageName: "Wallet/QrIcon"), color: theme.contextMenu.primaryColor) - }, action: { [weak self] _, f in - f(.dismissWithoutContent) - - let _ = (context.account.postbox.loadedPeerWithId(peerId) - |> deliverOnMainQueue).start(next: { [weak self] peer in - let isGroup: Bool - if let peer = peer as? TelegramChannel, case .broadcast = peer.info { - isGroup = false - } else { - isGroup = true - } - let controller = InviteLinkQRCodeController(context: context, invite: invite, isGroup: isGroup) - self?.controller?.present(controller, in: .window(.root)) - }) - }))) + if !invitationAvailability(invite).isZero { + items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextGetQRCode, icon: { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Wallet/QrIcon"), color: theme.contextMenu.primaryColor) + }, action: { [weak self] _, f in + f(.dismissWithoutContent) + + let _ = (context.account.postbox.loadedPeerWithId(peerId) + |> deliverOnMainQueue).start(next: { [weak self] peer in + let isGroup: Bool + if let peer = peer as? TelegramChannel, case .broadcast = peer.info { + isGroup = false + } else { + isGroup = true + } + let controller = InviteLinkQRCodeController(context: context, invite: invite, isGroup: isGroup) + self?.controller?.present(controller, in: .window(.root)) + }) + }))) + } items.append(.action(ContextMenuActionItem(text: presentationData.strings.InviteLink_ContextRevoke, textColor: .destructive, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Delete"), color: theme.actionSheet.destructiveActionTextColor) }, action: { [weak self] _, f in diff --git a/submodules/PeerInfoUI/Sources/PeerReportController.swift b/submodules/PeerInfoUI/Sources/PeerReportController.swift index 10d7a3990d..a5f7352285 100644 --- a/submodules/PeerInfoUI/Sources/PeerReportController.swift +++ b/submodules/PeerInfoUI/Sources/PeerReportController.swift @@ -14,6 +14,8 @@ import AlertUI import PresentationDataUtils import UndoUI import AppBundle +import TelegramPermissionsUI +import Markdown public enum PeerReportSubject { case peer(PeerId) @@ -159,31 +161,60 @@ public func peerReportOptionsController(context: AccountContext, subject: PeerRe if [.fake, .custom].contains(reportReason) { passthrough = false } - switch subject { - case let .peer(peerId): - if passthrough { - completion(reportReason, true) - } else { - let _ = (reportPeer(account: context.account, peerId: peerId, reason: reportReason, message: "") - |> deliverOnMainQueue).start(completed: { - if let path = getAppBundle().path(forResource: "PoliceCar", ofType: "tgs") { - present(UndoOverlayController(presentationData: presentationData, content: .emoji(path: path, text: presentationData.strings.Report_Succeed), elevatedLayout: false, action: { _ in return false }), nil) - } - completion(nil, false) - }) - } - case let .messages(messageIds): - if passthrough { - completion(reportReason, true) - } else { - let _ = (reportPeerMessages(account: context.account, messageIds: messageIds, reason: reportReason, message: "") - |> deliverOnMainQueue).start(completed: { - if let path = getAppBundle().path(forResource: "PoliceCar", ofType: "tgs") { - present(UndoOverlayController(presentationData: presentationData, content: .emoji(path: path, text: presentationData.strings.Report_Succeed), elevatedLayout: false, action: { _ in return false }), nil) - } - completion(nil, false) - }) - } + + let action = { + switch subject { + case let .peer(peerId): + if passthrough { + completion(reportReason, true) + } else { + let _ = (reportPeer(account: context.account, peerId: peerId, reason: reportReason, message: "") + |> deliverOnMainQueue).start(completed: { + if let path = getAppBundle().path(forResource: "PoliceCar", ofType: "tgs") { + present(UndoOverlayController(presentationData: presentationData, content: .emoji(path: path, text: presentationData.strings.Report_Succeed), elevatedLayout: false, action: { _ in return false }), nil) + } + completion(nil, false) + }) + } + case let .messages(messageIds): + if passthrough { + completion(reportReason, true) + } else { + let _ = (reportPeerMessages(account: context.account, messageIds: messageIds, reason: reportReason, message: "") + |> deliverOnMainQueue).start(completed: { + if let path = getAppBundle().path(forResource: "PoliceCar", ofType: "tgs") { + present(UndoOverlayController(presentationData: presentationData, content: .emoji(path: path, text: presentationData.strings.Report_Succeed), elevatedLayout: false, action: { _ in return false }), nil) + } + completion(nil, false) + }) + } + } + } + + if [.fake, .custom].contains(reportReason) { + let controller = ActionSheetController(presentationData: presentationData, allowInputInset: true) + let dismissAction: () -> Void = { [weak controller] in + controller?.dismissAnimated() + } + var message = "" + var items: [ActionSheetItem] = [] + items.append(ReportPeerHeaderActionSheetItem(context: context, text: presentationData.strings.Report_AdditionalDetailsText)) + items.append(ReportPeerDetailsActionSheetItem(context: context, placeholderText: presentationData.strings.Report_AdditionalDetailsPlaceholder, textUpdated: { text in + message = text + })) + items.append(ActionSheetButtonItem(title: presentationData.strings.Report_Report, color: .accent, font: .bold, enabled: true, action: { + dismissAction() + + action() + })) + + controller.setItemGroups([ + ActionSheetItemGroup(items: items), + ActionSheetItemGroup(items: [ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, action: { dismissAction() })]) + ]) + present(controller, nil) + } else { + action() } } else { push(peerReportController(context: context, subject: subject, completion: completion)) diff --git a/submodules/TelegramUI/Sources/ReportPeerDetailsActionSheetItem.swift b/submodules/PeerInfoUI/Sources/ReportPeerDetailsActionSheetItem.swift similarity index 100% rename from submodules/TelegramUI/Sources/ReportPeerDetailsActionSheetItem.swift rename to submodules/PeerInfoUI/Sources/ReportPeerDetailsActionSheetItem.swift diff --git a/submodules/TelegramUI/Sources/ReportPeerHeaderActionSheetItem.swift b/submodules/PeerInfoUI/Sources/ReportPeerHeaderActionSheetItem.swift similarity index 100% rename from submodules/TelegramUI/Sources/ReportPeerHeaderActionSheetItem.swift rename to submodules/PeerInfoUI/Sources/ReportPeerHeaderActionSheetItem.swift