From b93f76b6cd31193b0123f079838cfcb838703747 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Wed, 21 Aug 2019 01:18:07 +0300 Subject: [PATCH 1/3] Fixed logs sending when unauthorized --- ...rizationSequencePhoneEntryController.swift | 1 + .../TelegramUI/DebugController.swift | 141 ++++++++++-------- 2 files changed, 79 insertions(+), 63 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift index 8bb95b3cf6..d9601dacf0 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift @@ -95,6 +95,7 @@ final class AuthorizationSequencePhoneEntryController: ViewController { guard let strongSelf = self else { return } + strongSelf.view.endEditing(true) self?.present(debugController(sharedContext: strongSelf.sharedContext, context: nil, modal: true), in: .window(.root), with: ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }, hasOtherAccounts: self.otherAccountPhoneNumbers.0 != nil) if let (code, name, number) = self.currentData { diff --git a/submodules/TelegramUI/TelegramUI/DebugController.swift b/submodules/TelegramUI/TelegramUI/DebugController.swift index 11bed23910..d8aa9ccb9e 100644 --- a/submodules/TelegramUI/TelegramUI/DebugController.swift +++ b/submodules/TelegramUI/TelegramUI/DebugController.swift @@ -13,16 +13,24 @@ import MessageUI import TelegramPresentationData import TelegramUIPreferences +@objc private final class DebugControllerMailComposeDelegate: NSObject, MFMailComposeViewControllerDelegate { + public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { + controller.dismiss(animated: true, completion: nil) + } +} + private final class DebugControllerArguments { let sharedContext: SharedAccountContext let context: AccountContext? + let mailComposeDelegate: DebugControllerMailComposeDelegate let presentController: (ViewController, ViewControllerPresentationArguments?) -> Void let pushController: (ViewController) -> Void let getRootController: () -> UIViewController? - init(sharedContext: SharedAccountContext, context: AccountContext?, presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, pushController: @escaping (ViewController) -> Void, getRootController: @escaping () -> UIViewController?) { + init(sharedContext: SharedAccountContext, context: AccountContext?, mailComposeDelegate: DebugControllerMailComposeDelegate, presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, pushController: @escaping (ViewController) -> Void, getRootController: @escaping () -> UIViewController?) { self.sharedContext = sharedContext self.context = context + self.mailComposeDelegate = mailComposeDelegate self.presentController = presentController self.pushController = pushController self.getRootController = getRootController @@ -136,14 +144,13 @@ private enum DebugControllerEntry: ItemListNodeEntry { return ItemListDisclosureItem(theme: theme, title: "Send Logs", label: "", sectionId: self.section, style: .blocks, action: { let _ = (Logger.shared.collectLogs() |> deliverOnMainQueue).start(next: { logs in - guard let context = arguments.context else { - return - } - let presentationData = arguments.sharedContext.currentPresentationData.with { $0 } let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) - actionSheet.setItemGroups([ActionSheetItemGroup(items: [ - ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in + + var items: [ActionSheetButtonItem] = [] + + if let context = arguments.context { + items.append(ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) @@ -160,20 +167,23 @@ private enum DebugControllerEntry: ItemListNodeEntry { } } arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) - }), - ActionSheetButtonItem(title: "Via Email", color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - - let composeController = MFMailComposeViewController() - composeController.setSubject("Telegram Logs") - for (name, path) in logs { - if let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) { - composeController.addAttachmentData(data, mimeType: "application/text", fileName: name) - } + })) + } + items.append(ActionSheetButtonItem(title: "Via Email", color: .accent, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + + let composeController = MFMailComposeViewController() + composeController.mailComposeDelegate = arguments.mailComposeDelegate + composeController.setSubject("Telegram Logs") + for (name, path) in logs { + if let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) { + composeController.addAttachmentData(data, mimeType: "application/text", fileName: name) } - arguments.getRootController()?.present(composeController, animated: true, completion: nil) - }) - ]), ActionSheetItemGroup(items: [ + } + arguments.getRootController()?.present(composeController, animated: true, completion: nil) + })) + + actionSheet.setItemGroups([ActionSheetItemGroup(items: items), ActionSheetItemGroup(items: [ ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() }) @@ -185,16 +195,15 @@ private enum DebugControllerEntry: ItemListNodeEntry { return ItemListDisclosureItem(theme: theme, title: "Send Latest Log", label: "", sectionId: self.section, style: .blocks, action: { let _ = (Logger.shared.collectLogs() |> deliverOnMainQueue).start(next: { logs in - guard let context = arguments.context else { - return - } - let presentationData = arguments.sharedContext.currentPresentationData.with { $0 } let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) - actionSheet.setItemGroups([ActionSheetItemGroup(items: [ - ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in + + var items: [ActionSheetButtonItem] = [] + + if let context = arguments.context { + items.append(ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() - + let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) controller.peerSelected = { [weak controller] peerId in if let strongController = controller { @@ -211,24 +220,28 @@ private enum DebugControllerEntry: ItemListNodeEntry { } } arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) - }), - ActionSheetButtonItem(title: "Via Email", color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - - let composeController = MFMailComposeViewController() - composeController.setSubject("Telegram Logs") - for (name, path) in logs { - if let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) { - composeController.addAttachmentData(data, mimeType: "application/text", fileName: name) - } + })) + } + + items.append(ActionSheetButtonItem(title: "Via Email", color: .accent, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + + let composeController = MFMailComposeViewController() + composeController.mailComposeDelegate = arguments.mailComposeDelegate + composeController.setSubject("Telegram Logs") + for (name, path) in logs { + if let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) { + composeController.addAttachmentData(data, mimeType: "application/text", fileName: name) } - arguments.getRootController()?.present(composeController, animated: true, completion: nil) + } + arguments.getRootController()?.present(composeController, animated: true, completion: nil) + })) + + actionSheet.setItemGroups([ActionSheetItemGroup(items: items), ActionSheetItemGroup(items: [ + ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() }) - ]), ActionSheetItemGroup(items: [ - ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - }) - ]) + ]) ]) arguments.presentController(actionSheet, nil) }) @@ -260,14 +273,13 @@ private enum DebugControllerEntry: ItemListNodeEntry { return ItemListDisclosureItem(theme: theme, title: "Send Critical Logs", label: "", sectionId: self.section, style: .blocks, action: { let _ = (Logger.shared.collectShortLogFiles() |> deliverOnMainQueue).start(next: { logs in - guard let context = arguments.context else { - return - } - let presentationData = arguments.sharedContext.currentPresentationData.with { $0 } let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) - actionSheet.setItemGroups([ActionSheetItemGroup(items: [ - ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in + + var items: [ActionSheetButtonItem] = [] + + if let context = arguments.context { + items.append(ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) @@ -284,20 +296,23 @@ private enum DebugControllerEntry: ItemListNodeEntry { } } arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) - }), - ActionSheetButtonItem(title: "Via Email", color: .accent, action: { [weak actionSheet] in - actionSheet?.dismissAnimated() - - let composeController = MFMailComposeViewController() - composeController.setSubject("Telegram Logs") - for (name, path) in logs { - if let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) { - composeController.addAttachmentData(data, mimeType: "application/text", fileName: name) - } + })) + } + + items.append(ActionSheetButtonItem(title: "Via Email", color: .accent, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + + let composeController = MFMailComposeViewController() + composeController.mailComposeDelegate = arguments.mailComposeDelegate + composeController.setSubject("Telegram Logs") + for (name, path) in logs { + if let data = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe) { + composeController.addAttachmentData(data, mimeType: "application/text", fileName: name) } - arguments.getRootController()?.present(composeController, animated: true, completion: nil) - }) - ]), ActionSheetItemGroup(items: [ + } + arguments.getRootController()?.present(composeController, animated: true, completion: nil) + })) + actionSheet.setItemGroups([ActionSheetItemGroup(items: items), ActionSheetItemGroup(items: [ ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() }) @@ -548,7 +563,7 @@ public func debugController(sharedContext: SharedAccountContext, context: Accoun var dismissImpl: (() -> Void)? var getRootControllerImpl: (() -> UIViewController?)? - let arguments = DebugControllerArguments(sharedContext: sharedContext, context: context, presentController: { controller, arguments in + let arguments = DebugControllerArguments(sharedContext: sharedContext, context: context, mailComposeDelegate: DebugControllerMailComposeDelegate(), presentController: { controller, arguments in presentControllerImpl?(controller, arguments) }, pushController: { controller in pushControllerImpl?(controller) From b61e442d065dbcdf20cd8b3973a2230b737b19b3 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Wed, 28 Aug 2019 00:30:05 +0300 Subject: [PATCH 2/3] Fix build --- .../ChatListUI/Sources/Node/ChatListItem.swift | 3 +-- submodules/SettingsUI/Sources/DebugController.swift | 13 +++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/submodules/ChatListUI/Sources/Node/ChatListItem.swift b/submodules/ChatListUI/Sources/Node/ChatListItem.swift index 250bcaf62a..b31dd70383 100644 --- a/submodules/ChatListUI/Sources/Node/ChatListItem.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListItem.swift @@ -1329,7 +1329,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { if let currentMutedIconImage = currentMutedIconImage { strongSelf.mutedIconNode.image = currentMutedIconImage strongSelf.mutedIconNode.isHidden = false - transition.updateFrame(node: strongSelf.mutedIconNode, frame: CGRect(origin: CGPoint(x: nextTitleIconOrigin - 4.0, y: contentRect.origin.y - 2.0), size: currentMutedIconImage.size)) nextTitleIconOrigin += currentMutedIconImage.size.width + 1.0 } else { @@ -1568,7 +1567,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { } let mutedIconFrame = self.mutedIconNode.frame - transition.updateFrame(node: self.mutedIconNode, frame: CGRect(origin: CGPoint(x: nextTitleIconOrigin - 6.0, y: contentRect.origin.y - 1.0), size: mutedIconFrame.size)) + transition.updateFrame(node: self.mutedIconNode, frame: CGRect(origin: CGPoint(x: nextTitleIconOrigin - 4.0, y: contentRect.origin.y - 2.0), size: mutedIconFrame.size)) nextTitleIconOrigin += mutedIconFrame.size.width + 3.0 let badgeFrame = self.badgeNode.frame diff --git a/submodules/SettingsUI/Sources/DebugController.swift b/submodules/SettingsUI/Sources/DebugController.swift index b7a0f60284..bebb164068 100644 --- a/submodules/SettingsUI/Sources/DebugController.swift +++ b/submodules/SettingsUI/Sources/DebugController.swift @@ -144,6 +144,10 @@ private enum DebugControllerEntry: ItemListNodeEntry { return ItemListDisclosureItem(theme: theme, title: "Send Logs", label: "", sectionId: self.section, style: .blocks, action: { let _ = (Logger.shared.collectLogs() |> deliverOnMainQueue).start(next: { logs in + guard let context = arguments.context else { + return + } + let presentationData = arguments.sharedContext.currentPresentationData.with { $0 } let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) @@ -153,7 +157,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { items.append(ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() - let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) + let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) controller.peerSelected = { [weak controller] peerId in if let strongController = controller { strongController.dismiss() @@ -253,7 +257,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { guard let context = arguments.context else { return } - let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) + let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) controller.peerSelected = { [weak controller] peerId in if let strongController = controller { strongController.dismiss() @@ -282,7 +286,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { items.append(ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() - let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) + let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) controller.peerSelected = { [weak controller] peerId in if let strongController = controller { strongController.dismiss() @@ -522,7 +526,8 @@ private func debugControllerEntries(presentationData: PresentationData, loggingS entries.append(.resetHoles(presentationData.theme)) entries.append(.optimizeDatabase(presentationData.theme)) entries.append(.photoPreview(presentationData.theme, experimentalSettings.chatListPhotos)) - + entries.append(.knockoutWallpaper(presentationData.theme, experimentalSettings.knockoutWallpaper)) + entries.append(.versionInfo(presentationData.theme)) return entries From 20ed214511767450e92fe92bb2b2aa1aa86bbe0a Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Wed, 28 Aug 2019 00:34:07 +0300 Subject: [PATCH 3/3] Fix builld --- .../SettingsUI/Sources/DebugController.swift | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/submodules/SettingsUI/Sources/DebugController.swift b/submodules/SettingsUI/Sources/DebugController.swift index bebb164068..9c9be159f9 100644 --- a/submodules/SettingsUI/Sources/DebugController.swift +++ b/submodules/SettingsUI/Sources/DebugController.swift @@ -68,6 +68,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { case resetBiometricsData(PresentationTheme) case optimizeDatabase(PresentationTheme) case photoPreview(PresentationTheme, Bool) + case knockoutWallpaper(PresentationTheme, Bool) case versionInfo(PresentationTheme) var section: ItemListSectionId { @@ -80,7 +81,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { return DebugControllerSection.logging.rawValue case .enableRaiseToSpeak, .keepChatNavigationStack, .skipReadHistory, .crashOnSlowQueries: return DebugControllerSection.experiments.rawValue - case .clearTips, .reimport, .resetData, .resetDatabase, .resetHoles, .resetBiometricsData, .optimizeDatabase, .photoPreview: + case .clearTips, .reimport, .resetData, .resetDatabase, .resetHoles, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper: return DebugControllerSection.experiments.rawValue case .versionInfo: return DebugControllerSection.info.rawValue @@ -129,8 +130,10 @@ private enum DebugControllerEntry: ItemListNodeEntry { return 18 case .photoPreview: return 19 - case .versionInfo: + case .knockoutWallpaper: return 20 + case .versionInfo: + return 21 } } @@ -208,7 +211,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { items.append(ActionSheetButtonItem(title: "Via Telegram", color: .accent, action: { [weak actionSheet] in actionSheet?.dismissAnimated() - let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) + let controller = context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: context, filter: [.onlyWriteable, .excludeDisabled])) controller.peerSelected = { [weak controller] peerId in if let strongController = controller { strongController.dismiss() @@ -488,6 +491,16 @@ private enum DebugControllerEntry: ItemListNodeEntry { }) }).start() }) + case let .knockoutWallpaper(theme, value): + return ItemListSwitchItem(theme: theme, title: "Knockout Wallpaper", value: value, sectionId: self.section, style: .blocks, updated: { value in + let _ = arguments.sharedContext.accountManager.transaction ({ transaction in + transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in + var settings = settings as? ExperimentalUISettings ?? ExperimentalUISettings.defaultSettings + settings.knockoutWallpaper = value + return settings + }) + }).start() + }) case let .versionInfo(theme): let bundle = Bundle.main let bundleId = bundle.bundleIdentifier ?? ""