This commit is contained in:
Harold Hunt 2026-06-10 02:48:39 +00:00 committed by GitHub
commit 7ff609b132
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 40 additions and 0 deletions

View file

@ -133,6 +133,33 @@ func matchingCloudContacts(postbox: Postbox, contacts: [MatchingDeviceContact])
}
}
func matchingOpenChatWithDeviceContacts(postbox: Postbox, contacts: [MatchingDeviceContact]) -> Signal<[(String, TelegramUser)], NoError> {
return postbox.transaction { transaction -> [(String, TelegramUser)] in
var result: [(String, TelegramUser)] = []
let contactPeerIds = transaction.getContactPeerIds()
outer: for peerId in transaction.chatListGetAllPeerIds(groupId: .root) {
if contactPeerIds.contains(peerId) {
continue
}
if peerId.namespace != Namespaces.Peer.CloudUser {
continue
}
guard let user = transaction.getPeer(peerId) as? TelegramUser, !user.isDeleted else {
continue
}
for contact in contacts {
if let contactPeerId = contact.peerId, contactPeerId == peerId {
result.append((contact.stableId, user))
continue outer
}
}
}
return result
}
}
func matchingCloudContact(postbox: Postbox, peerId: PeerId) -> Signal<TelegramUser?, NoError> {
return postbox.transaction { transaction -> TelegramUser? in
if let user = transaction.getPeer(peerId) as? TelegramUser {

View file

@ -336,6 +336,19 @@ class DefaultIntentHandler: INExtension, INSendMessageIntentHandling, INSearchFo
|> mapToSignal { account -> Signal<[(String, TelegramUser)], IntentContactsError> in
if let account = account {
return matchingCloudContacts(postbox: account.postbox, contacts: matchedContacts)
|> mapToSignal { cloudContacts -> Signal<[(String, TelegramUser)], NoError> in
let matchedStableIds = Set(cloudContacts.map { $0.0 })
let unmatchedContacts = matchedContacts.filter { !matchedStableIds.contains($0.stableId) }
if unmatchedContacts.isEmpty {
return .single(cloudContacts)
}
return matchingOpenChatWithDeviceContacts(postbox: account.postbox, contacts: unmatchedContacts)
|> map { openChatContacts -> [(String, TelegramUser)] in
var result = cloudContacts
result.append(contentsOf: openChatContacts)
return result
}
}
|> castError(IntentContactsError.self)
} else {
return .fail(.generic)