diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 5a60922053..e64271029b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -1580,7 +1580,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if peer.id == strongSelf.context.account.peerId { mode = .reminders } else { - mode = .scheduledMessages + mode = .scheduledMessages(sendWhenOnlineAvailable: peer.id.namespace == Namespaces.Peer.CloudUser) } let controller = ChatScheduleTimeController(context: strongSelf.context, mode: mode, minimalTime: strongSelf.presentationInterfaceState.slowmodeState?.timeout, completion: { [weak self] scheduleTime in @@ -1612,7 +1612,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if peer.id == strongSelf.context.account.peerId { mode = .reminders } else { - mode = .scheduledMessages + mode = .scheduledMessages(sendWhenOnlineAvailable: peer.id.namespace == Namespaces.Peer.CloudUser) } let _ = (strongSelf.context.account.postbox.transaction { transaction -> Message? in @@ -5463,7 +5463,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if peer.id == strongSelf.context.account.peerId { mode = .reminders } else { - mode = .scheduledMessages + mode = .scheduledMessages(sendWhenOnlineAvailable: peer.id.namespace == Namespaces.Peer.CloudUser) } let controller = ChatScheduleTimeController(context: strongSelf.context, mode: mode, minimalTime: strongSelf.presentationInterfaceState.slowmodeState?.timeout, completion: { [weak self] time in if let strongSelf = self { @@ -5504,7 +5504,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if peer.id == strongSelf.context.account.peerId { mode = .reminders } else { - mode = .scheduledMessages + mode = .scheduledMessages(sendWhenOnlineAvailable: peer.id.namespace == Namespaces.Peer.CloudUser) } let controller = ChatScheduleTimeController(context: strongSelf.context, mode: mode, minimalTime: strongSelf.presentationInterfaceState.slowmodeState?.timeout, completion: { [weak self] time in if let strongSelf = self { @@ -5693,7 +5693,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if peer.id == strongSelf.context.account.peerId { mode = .reminders } else { - mode = .scheduledMessages + mode = .scheduledMessages(sendWhenOnlineAvailable: peer.id.namespace == Namespaces.Peer.CloudUser) } let controller = ChatScheduleTimeController(context: strongSelf.context, mode: mode, minimalTime: strongSelf.presentationInterfaceState.slowmodeState?.timeout, completion: { [weak self] time in if let strongSelf = self { @@ -5980,7 +5980,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if peerId == self.context.account.peerId { mode = .reminders } else { - mode = .scheduledMessages + mode = .scheduledMessages(sendWhenOnlineAvailable: peerId.namespace == Namespaces.Peer.CloudUser) } let controller = ChatScheduleTimeController(context: self.context, mode: mode, minimalTime: self.presentationInterfaceState.slowmodeState?.timeout, dismissByTapOutside: false, completion: { [weak self] time in if let strongSelf = self { diff --git a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift index 949d343aa0..682b838a13 100644 --- a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift @@ -9,7 +9,7 @@ import SwiftSignalKit import AccountContext enum ChatScheduleTimeControllerMode { - case scheduledMessages + case scheduledMessages(sendWhenOnlineAvailable: Bool) case reminders } diff --git a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift index c72b17af5f..859f4c309b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift @@ -102,7 +102,9 @@ class ChatScheduleTimeControllerNode: ViewControllerTracingNode, UIScrollViewDel self.contentContainerNode.addSubnode(self.titleNode) self.contentContainerNode.addSubnode(self.cancelButton) self.contentContainerNode.addSubnode(self.doneButton) - //self.contentContainerNode.addSubnode(self.onlineButton) + if case .scheduledMessages(true) = self.mode { + self.contentContainerNode.addSubnode(self.onlineButton) + } self.cancelButton.addTarget(self, action: #selector(self.cancelButtonPressed), forControlEvents: .touchUpInside) self.doneButton.pressed = { [weak self] in @@ -311,7 +313,10 @@ class ChatScheduleTimeControllerNode: ViewControllerTracingNode, UIScrollViewDel let cleanInsets = layout.insets(options: [.statusBar]) insets.top = max(10.0, insets.top) - var buttonOffset: CGFloat = 0.0 //44.0 + var buttonOffset: CGFloat = 0.0 + if case .scheduledMessages(true) = self.mode { + buttonOffset += 44.0 + } let bottomInset: CGFloat = 10.0 + cleanInsets.bottom let titleHeight: CGFloat = 54.0 diff --git a/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift b/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift index b0e5ba1b9a..ae5871dd0e 100644 --- a/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift +++ b/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift @@ -330,6 +330,6 @@ func openResolvedUrlImpl(_ resolvedUrl: ResolvedUrl, context: AccountContext, ur dismissInput() context.sharedContext.openWallet(context: context, walletContext: .send(address: address, amount: amount, comment: comment)) { c in navigationController?.pushViewController(c) - } + } } } diff --git a/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift b/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift index 378c50f0d0..1697a207aa 100644 --- a/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift +++ b/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift @@ -65,6 +65,10 @@ func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigate controller.present(JoinLinkPreviewController(context: context, link: link, navigateToPeer: { peerId in openResolvedPeerImpl(peerId, .chat(textInputState: nil, subject: nil)) }), in: .window(.root)) + case let .wallet(address, amount, comment): + context.sharedContext.openWallet(context: context, walletContext: .send(address: address, amount: amount, comment: comment)) { c in + (controller.navigationController as? NavigationController)?.pushViewController(c) + } default: break } diff --git a/submodules/WalletUrl/Sources/WalletUrl.swift b/submodules/WalletUrl/Sources/WalletUrl.swift index e55cdd0d18..8cdc58b7aa 100644 --- a/submodules/WalletUrl/Sources/WalletUrl.swift +++ b/submodules/WalletUrl/Sources/WalletUrl.swift @@ -18,14 +18,16 @@ public func parseWalletUrl(_ url: URL) -> ParsedWalletUrl? { guard url.scheme == "ton" && url.host == "transfer" else { return nil } + let updatedUrl = URL(string: url.absoluteString.replacingOccurrences(of: "+", with: "%20"), relativeTo: nil) ?? url + var address: String? - let path = url.path.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + let path = updatedUrl.path.trimmingCharacters(in: CharacterSet(charactersIn: "/")) if isValidWalletAddress(path) { address = path } var amount: Int64? var comment: String? - if let query = url.query, let components = URLComponents(string: "/?" + query), let queryItems = components.queryItems { + if let query = updatedUrl.query, let components = URLComponents(string: "/?" + query), let queryItems = components.queryItems { for queryItem in queryItems { if let value = queryItem.value { if queryItem.name == "amount", !value.isEmpty, let amountValue = Int64(value) {