diff --git a/SiriIntents/IntentContacts.swift b/SiriIntents/IntentContacts.swift index fcfd7edbba..8b5182c44b 100644 --- a/SiriIntents/IntentContacts.swift +++ b/SiriIntents/IntentContacts.swift @@ -31,6 +31,20 @@ private func parseAppSpecificContactReference(_ value: String) -> PeerId? { return nil } +private func cleanPhoneNumber(_ text: String) -> String { + var result = "" + for c in text { + if c == "+" { + if result.isEmpty { + result += String(c) + } + } else if c >= "0" && c <= "9" { + result += String(c) + } + } + return result +} + func matchingDeviceContacts(stableIds: [String]) -> Signal<[MatchingDeviceContact], IntentContactsError> { guard CNContactStore.authorizationStatus(for: .contacts) == .authorized else { return .fail(.generic) @@ -43,7 +57,7 @@ func matchingDeviceContacts(stableIds: [String]) -> Signal<[MatchingDeviceContac return .single(contacts.map({ contact in let phoneNumbers = contact.phoneNumbers.compactMap({ number -> String? in if !number.value.stringValue.isEmpty { - return number.value.stringValue + return cleanPhoneNumber(number.value.stringValue) } else { return nil } @@ -75,22 +89,18 @@ func matchingCloudContacts(postbox: Postbox, contacts: [MatchingDeviceContact]) var result: [(String, TelegramUser)] = [] outer: for peerId in transaction.getContactPeerIds() { if let peer = transaction.getPeer(peerId) as? TelegramUser { - if let peerPhoneNumber = peer.phone { - for contact in contacts { - for phoneNumber in contact.phoneNumbers { - if matchPhoneNumbers(phoneNumber, peerPhoneNumber) { + for contact in contacts { + if let contactPeerId = contact.peerId, contactPeerId == peerId { + result.append((contact.stableId, peer)) + continue outer + } else if let peerPhoneNumber = peer.phone { + for contactPhoneNumber in contact.phoneNumbers { + if matchPhoneNumbers(contactPhoneNumber, peerPhoneNumber) { result.append((contact.stableId, peer)) continue outer } } } - } else { - for contact in contacts { - if let contactPeerId = contact.peerId, contactPeerId == peerId { - result.append((contact.stableId, peer)) - continue outer - } - } } } } diff --git a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift index c115d76c87..dbe27e03d3 100644 --- a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeController.swift @@ -21,11 +21,13 @@ final class ChatScheduleTimeController: ViewController { private let context: AccountContext private let mode: ChatScheduleTimeControllerMode + private let currentTime: Int32? private let completion: (Int32) -> Void - init(context: AccountContext, mode: ChatScheduleTimeControllerMode, completion: @escaping (Int32) -> Void) { + init(context: AccountContext, mode: ChatScheduleTimeControllerMode, currentTime: Int32? = nil, completion: @escaping (Int32) -> Void) { self.context = context self.mode = mode + self.currentTime = currentTime self.completion = completion super.init(navigationBarPresentationData: nil) @@ -38,7 +40,7 @@ final class ChatScheduleTimeController: ViewController { } override public func loadDisplayNode() { - self.displayNode = ChatScheduleTimeControllerNode(context: self.context, mode: self.mode) + self.displayNode = ChatScheduleTimeControllerNode(context: self.context, mode: self.mode, currentTime: self.currentTime) self.controllerNode.completion = { [weak self] time in self?.completion(time + 5) self?.dismiss() diff --git a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift index e528493717..d99c00c5b1 100644 --- a/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatScheduleTimeControllerNode.swift @@ -33,7 +33,7 @@ class ChatScheduleTimeControllerNode: ViewControllerTracingNode, UIScrollViewDel var dismiss: (() -> Void)? var cancel: (() -> Void)? - init(context: AccountContext, mode: ChatScheduleTimeControllerMode) { + init(context: AccountContext, mode: ChatScheduleTimeControllerMode, currentTime: Int32?) { self.context = context self.mode = mode self.presentationData = context.sharedContext.currentPresentationData.with { $0 } @@ -123,11 +123,11 @@ class ChatScheduleTimeControllerNode: ViewControllerTracingNode, UIScrollViewDel } } - self.updateMinimumDate() + self.updateMinimumDate(currentTime: currentTime) self.updateButtonTitle() } - private func updateMinimumDate() { + private func updateMinimumDate(currentTime: Int32? = nil) { let timeZone = TimeZone(secondsFromGMT: 0)! var calendar = Calendar(identifier: .gregorian) calendar.timeZone = timeZone @@ -142,7 +142,11 @@ class ChatScheduleTimeControllerNode: ViewControllerTracingNode, UIScrollViewDel if let date = calendar.date(byAdding: .minute, value: 5 - minute, to: calendar.date(from: components)!) { self.pickerView.minimumDate = date - self.pickerView.date = date + if let currentTime = currentTime { + self.pickerView.date = Date(timeIntervalSince1970: Double(currentTime)) + } else { + self.pickerView.date = date + } } }