diff --git a/Linphone/Contacts/ContactsManager.swift b/Linphone/Contacts/ContactsManager.swift index 5e8efdf50..cc3c30db1 100644 --- a/Linphone/Contacts/ContactsManager.swift +++ b/Linphone/Contacts/ContactsManager.swift @@ -133,9 +133,31 @@ final class ContactsManager: ObservableObject { MagicSearchSingleton.shared.searchForContacts(sourceFlags: MagicSearch.Source.Friends.rawValue | MagicSearch.Source.LdapServers.rawValue) - self.friendListSuscription = self.friendList?.publisher?.onPresenceReceived?.postOnMainQueue { (cbValue: (friendList: FriendList, friends: [Friend])) in - MagicSearchSingleton.shared.searchForContacts(sourceFlags: MagicSearch.Source.Friends.rawValue | MagicSearch.Source.LdapServers.rawValue) - self.friendListSuscription = nil + self.friendListSuscription = self.friendList?.publisher?.onNewSipAddressDiscovered?.postOnMainQueue { (cbValue: (friendList: FriendList, linphoneFriend: Friend, sipUri: String)) in + + cbValue.linphoneFriend.phoneNumbers.forEach { phone in + do { + let address = core.interpretUrl(url: phone, applyInternationalPrefix: true) + + let presence = cbValue.linphoneFriend.getPresenceModelForUriOrTel(uriOrTel: address?.asStringUriOnly() ?? "") + if address != nil && presence != nil { + cbValue.linphoneFriend.edit() + cbValue.linphoneFriend.addAddress(address: address!) + cbValue.linphoneFriend.done() + + self.avatarListModel.append( + ContactAvatarModel( + friend: cbValue.linphoneFriend, + name: cbValue.linphoneFriend.name ?? "", + address: cbValue.linphoneFriend.address?.clone()?.asStringUriOnly() ?? "", + withPresence: true + ) + ) + } + } catch let error { + print("\(#function) - Failed to create friend phone number for \(phone):", error) + } + } } } } @@ -224,11 +246,13 @@ final class ContactsManager: ObservableObject { friend.removeAddress(address: address) }) contact.sipAddresses.forEach { sipAddress in - let address = core.interpretUrl(url: sipAddress, applyInternationalPrefix: true) - - if address != nil && ((friendAddresses.firstIndex(where: {$0.asString() == address?.asString()})) == nil) { - friend.addAddress(address: address!) - friendAddresses.append(address!) + if !sipAddress.isEmpty { + let address = core.interpretUrl(url: sipAddress, applyInternationalPrefix: true) + + if address != nil && ((friendAddresses.firstIndex(where: {$0.asString() == address?.asString()})) == nil) { + friend.addAddress(address: address!) + friendAddresses.append(address!) + } } } diff --git a/Linphone/Core/CoreContext.swift b/Linphone/Core/CoreContext.swift index c8cab6475..c3608d72f 100644 --- a/Linphone/Core/CoreContext.swift +++ b/Linphone/Core/CoreContext.swift @@ -173,6 +173,14 @@ final class CoreContext: ObservableObject { if cbVal.state == .Ok { self.loggingInProgress = false self.loggedIn = true + + let newParams = cbVal.account.params?.clone() + newParams?.internationalPrefix = "33" + newParams?.internationalPrefixIsoCountryCode = "FRA" + newParams?.useInternationalPrefixForCallsAndChats = true + + cbVal.account.params = newParams + ContactsManager.shared.fetchContacts() } else if cbVal.state == .Progress { self.loggingInProgress = true diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift index 5342c92f5..a2cc390f9 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift @@ -32,7 +32,7 @@ struct ContactsInnerFragment: View { var body: some View { VStack(alignment: .leading) { - if !contactsManager.lastSearch.filter({ $0.friend?.starred == true }).isEmpty { + if !contactsManager.avatarListModel.filter({ $0.friend?.starred == true }).isEmpty { HStack(alignment: .center) { Text("Favourites") .default_text_style_800(styleSize: 16) @@ -80,7 +80,7 @@ struct ContactsInnerFragment: View { .listStyle(.plain) .overlay( VStack { - if contactsManager.lastSearch.isEmpty { + if contactsManager.avatarListModel.isEmpty { Spacer() Image("illus-belledonne") .resizable() diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift index 45045959e..c8db8a7c6 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift @@ -32,21 +32,21 @@ struct ContactsListFragment: View { var startCallFunc: (_ addr: Address) -> Void var body: some View { - ForEach(0..