From dfb61a32673ebd28c9e5cdceb0fcf88f775c0e4c Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 13 Aug 2019 04:54:53 +0300 Subject: [PATCH 1/3] Fixed Watch voice messages encoding Fixed Siri contacts matching --- SiriIntents/IntentContacts.swift | 34 ++++++++++++------- .../Bridge Audio/TGBridgeAudioEncoder.m | 2 +- .../TelegramUI/ResetPasswordController.swift | 2 +- 3 files changed, 24 insertions(+), 14 deletions(-) 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/Bridge Audio/TGBridgeAudioEncoder.m b/submodules/TelegramUI/TelegramUI/Bridge Audio/TGBridgeAudioEncoder.m index 0177caaffa..c2a137bfc0 100644 --- a/submodules/TelegramUI/TelegramUI/Bridge Audio/TGBridgeAudioEncoder.m +++ b/submodules/TelegramUI/TelegramUI/Bridge Audio/TGBridgeAudioEncoder.m @@ -121,7 +121,7 @@ typedef enum { return queue; } -static const int encoderPacketSizeInBytes = TGBridgeAudioEncoderSampleRate / 1000 * 60 * 2; +static const int encoderPacketSizeInBytes = 16000 / 1000 * 60 * 2; - (void)startWithCompletion:(void (^)(NSString *, int32_t))completion { diff --git a/submodules/TelegramUI/TelegramUI/ResetPasswordController.swift b/submodules/TelegramUI/TelegramUI/ResetPasswordController.swift index 76d8d3a94e..8d66978498 100644 --- a/submodules/TelegramUI/TelegramUI/ResetPasswordController.swift +++ b/submodules/TelegramUI/TelegramUI/ResetPasswordController.swift @@ -65,7 +65,7 @@ private enum ResetPasswordEntry: ItemListNodeEntry, Equatable { func item(_ arguments: ResetPasswordControllerArguments) -> ListViewItem { switch self { case let .code(theme, text, value): - return ItemListSingleLineInputItem(theme: theme, title: NSAttributedString(string: text), text: value, placeholder: "", type: .number, spacing: 10.0, tag: ResetPasswordEntryTag.code, sectionId: self.section, textUpdated: { updatedText in + return ItemListSingleLineInputItem(theme: theme, title: NSAttributedString(string: text, textColor: theme.list.itemPrimaryTextColor), text: value, placeholder: "", type: .number, spacing: 10.0, tag: ResetPasswordEntryTag.code, sectionId: self.section, textUpdated: { updatedText in arguments.updateCodeText(updatedText) }, action: { }) From 1ad7b99f4f8287d2646b77b4b41a219e21e3915e Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 13 Aug 2019 15:09:49 +0300 Subject: [PATCH 2/3] Don't call basicEmoji for every message --- .../TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift | 3 ++- submodules/TelegramUI/TelegramUI/EmojiUtils.swift | 8 -------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift b/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift index 6f41313dac..9bda993d6b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift +++ b/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift @@ -39,7 +39,8 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, var contentTypeHint: ChatMessageEntryContentType = .generic if presentationData.largeEmoji { - if let _ = associatedData.animatedEmojiStickers[entry.message.text.basicEmoji.0] { + let messageText = entry.message.text + if messageText.count == 1, let _ = associatedData.animatedEmojiStickers[messageText.basicEmoji.0] { contentTypeHint = .animatedEmoji } else if messageIsElligibleForLargeEmoji(entry.message) { contentTypeHint = .largeEmoji diff --git a/submodules/TelegramUI/TelegramUI/EmojiUtils.swift b/submodules/TelegramUI/TelegramUI/EmojiUtils.swift index 32c3535f45..6f00f6b78c 100644 --- a/submodules/TelegramUI/TelegramUI/EmojiUtils.swift +++ b/submodules/TelegramUI/TelegramUI/EmojiUtils.swift @@ -152,12 +152,4 @@ extension String { } return (string, fitzModifier) } - - var trimmedEmoji: String { - if self.unicodeScalars.count > 1, self.unicodeScalars.first?.value == 0x2764, self.emojis.count == 1 { - return String(self.unicodeScalars.prefix(self.unicodeScalars.count - 1)) - } else { - return self - } - } } From 7b147bc8e1ca4eb5651eb27678dc795832d5cbb1 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 13 Aug 2019 15:25:33 +0300 Subject: [PATCH 3/3] Fixed heart emoji detection & normalization for emoji keywords --- submodules/TelegramUI/TelegramUI/ChatMessageItem.swift | 6 +++--- submodules/TelegramUI/TelegramUI/EmojiUtils.swift | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift b/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift index c019eb9860..8f11c17388 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift @@ -386,10 +386,10 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible { } } - if viewClassName == ChatMessageBubbleItemNode.self && self.presentationData.largeEmoji && messageIsElligibleForLargeEmoji(self.message) { - if let _ = self.associatedData.animatedEmojiStickers[self.message.text.basicEmoji.0] { + if viewClassName == ChatMessageBubbleItemNode.self && self.presentationData.largeEmoji { + if self.message.text.count == 1, let _ = self.associatedData.animatedEmojiStickers[self.message.text.basicEmoji.0] { viewClassName = ChatMessageAnimatedStickerItemNode.self - } else { + } else if messageIsElligibleForLargeEmoji(self.message) { viewClassName = ChatMessageStickerItemNode.self } } diff --git a/submodules/TelegramUI/TelegramUI/EmojiUtils.swift b/submodules/TelegramUI/TelegramUI/EmojiUtils.swift index 6f00f6b78c..42cc09e558 100644 --- a/submodules/TelegramUI/TelegramUI/EmojiUtils.swift +++ b/submodules/TelegramUI/TelegramUI/EmojiUtils.swift @@ -19,8 +19,6 @@ extension UnicodeScalar { return true case 0x1f004: return true - case 0x2764: - return true case 0x270b, 0x2728: return true default: