From e3bf00dca52ebee67402170ef16a38cd79311a61 Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Tue, 3 Feb 2026 13:08:58 +0100 Subject: [PATCH] Fix contacts with only a phone number --- Linphone/GeneratedGit.swift | 2 +- .../Contacts/Fragments/ContactsListFragment.swift | 15 +++++++++++---- .../Main/Contacts/Model/ContactAvatarModel.swift | 11 +++++++++++ .../Fragments/AddParticipantsFragment.swift | 12 ++++++++++-- .../Settings/ViewModel/CardDavViewModel.swift | 10 +++++----- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Linphone/GeneratedGit.swift b/Linphone/GeneratedGit.swift index 119b27c2b..37dc09539 100644 --- a/Linphone/GeneratedGit.swift +++ b/Linphone/GeneratedGit.swift @@ -2,6 +2,6 @@ import Foundation public enum AppGitInfo { public static let branch = "master" - public static let commit = "2fea9d720" + public static let commit = "b3ed027c6" public static let tag = "6.1.0-alpha" } diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift index 2835c128d..6a5c529f9 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift @@ -99,10 +99,17 @@ struct ContactRow: View { SharedMainViewModel.shared.displayedFriend = contactAvatarModel } } - - if contactAvatarModel.friend != nil - && contactAvatarModel.friend!.address != nil { - startCallFunc(contactAvatarModel.friend!.address!) + + CoreContext.shared.doOnCoreQueue { core in + if let friend = contactAvatarModel.friend { + if let friendAddress = friend.address { + startCallFunc(friendAddress) + } else if !friend.phoneNumbers.isEmpty { + if let address = core.interpretUrl(url: friend.phoneNumbers.first ?? "", applyInternationalPrefix: LinphoneUtils.applyInternationalPrefix(core: core)) { + startCallFunc(address) + } + } + } } } .onLongPressGesture(minimumDuration: 0.2) { diff --git a/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift b/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift index d4e37cf7d..139658f11 100644 --- a/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift +++ b/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift @@ -204,6 +204,17 @@ class ContactAvatarModel: ObservableObject, Identifiable { if avatarModel == nil { avatarModel = ContactAvatarModel(friend: nil, name: addressFriend.name!, address: addressFriend.address!.asStringUriOnly(), withPresence: false) } + completion(avatarModel!) + } else if !addressFriend.phoneNumbers.isEmpty { + var avatarModel = ContactsManager.shared.avatarListModel.first(where: { + $0.friend != nil && $0.friend!.name == addressFriend.name && !$0.friend!.phoneNumbers.isEmpty + && $0.friend!.phoneNumbers == addressFriend.phoneNumbers + }) + + if avatarModel == nil { + avatarModel = ContactAvatarModel(friend: nil, name: addressFriend.name!, address: addressFriend.phoneNumbers.first ?? addressFriend.address?.asStringUriOnly() ?? "", withPresence: false) + } + completion(avatarModel!) } else { var name = "" diff --git a/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift b/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift index e142a3c70..081b1b7de 100644 --- a/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift @@ -220,8 +220,16 @@ struct AddParticipantsFragment: View { } .background(.white) .onTapGesture { - if let addr = try? Factory.Instance.createAddress(addr: contactsManager.avatarListModel[index].address) { - addParticipantsViewModel.selectParticipant(addr: addr) + CoreContext.shared.doOnCoreQueue { core in + if !contactsManager.avatarListModel[index].address.isEmpty { + if let addr = try? Factory.Instance.createAddress(addr: contactsManager.avatarListModel[index].address) { + addParticipantsViewModel.selectParticipant(addr: addr) + } + } else if !contactsManager.avatarListModel[index].phoneNumbersWithLabel.isEmpty { + if let address = core.interpretUrl(url: contactsManager.avatarListModel[index].phoneNumbersWithLabel.first?.phoneNumber ?? "", applyInternationalPrefix: LinphoneUtils.applyInternationalPrefix(core: core)) { + addParticipantsViewModel.selectParticipant(addr: address) + } + } } } .buttonStyle(.borderless) diff --git a/Linphone/UI/Main/Settings/ViewModel/CardDavViewModel.swift b/Linphone/UI/Main/Settings/ViewModel/CardDavViewModel.swift index a55ba6598..f80e7f560 100644 --- a/Linphone/UI/Main/Settings/ViewModel/CardDavViewModel.swift +++ b/Linphone/UI/Main/Settings/ViewModel/CardDavViewModel.swift @@ -31,11 +31,11 @@ class CardDavViewModel: ObservableObject { let tempRemoteAddressBookFriendList = "TempRemoteDirectoryContacts address-book" @Published var isEdit: Bool = false - @Published var displayName: String = "" - @Published var serverUrl: String = "" - @Published var username: String = "" - @Published var password: String = "" - @Published var realm: String = "" + @Published var displayName: String = "CardDav Test" + @Published var serverUrl: String = "https://dav.berfini.me/dav.php/addressbooks/BC/default/" + @Published var username: String = "BC" + @Published var password: String = "cotcot" + @Published var realm: String = "BaikalDAV" @Published var storeNewContactsInIt: Bool = false @Published var isReadOnly: Bool = false