From dbb667fd9e0e34b922dfc3bb101c52013cc73ccb Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Thu, 6 Jun 2024 15:36:41 +0200 Subject: [PATCH] Extract forgotten Linphone objects that were being used in the main queue --- .../Contacts/Model/ContactAvatarModel.swift | 7 ++- Linphone/Utils/MagicSearchSingleton.swift | 48 ++++++++++--------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift b/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift index e59eee351..8caf5b8eb 100644 --- a/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift +++ b/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift @@ -72,12 +72,15 @@ class ContactAvatarModel: ObservableObject { func addSubscription() { friendSuscription = self.friend?.publisher?.onPresenceReceived?.postOnCoreQueue { (cbValue: (Friend)) in + + let latestActivityTimestamp = cbValue.presenceModel?.latestActivityTimestamp ?? -1 + DispatchQueue.main.async { self.presenceStatus = cbValue.consolidatedPresence if cbValue.consolidatedPresence == .Online || cbValue.consolidatedPresence == .Busy { - if cbValue.consolidatedPresence == .Online || cbValue.presenceModel!.latestActivityTimestamp != -1 { + if cbValue.consolidatedPresence == .Online || latestActivityTimestamp != -1 { self.lastPresenceInfo = cbValue.consolidatedPresence == .Online ? - "Online" : self.getCallTime(startDate: cbValue.presenceModel!.latestActivityTimestamp) + "Online" : self.getCallTime(startDate: latestActivityTimestamp) } else { self.lastPresenceInfo = "Away" } diff --git a/Linphone/Utils/MagicSearchSingleton.swift b/Linphone/Utils/MagicSearchSingleton.swift index 03b3e4c7b..0307c5bc9 100644 --- a/Linphone/Utils/MagicSearchSingleton.swift +++ b/Linphone/Utils/MagicSearchSingleton.swift @@ -67,36 +67,38 @@ final class MagicSearchSingleton: ObservableObject { lastSearchSuggestions.append(searchResult) } } + lastSearchSuggestions.sort(by: { + $0.address!.asStringUriOnly() < $1.address!.asStringUriOnly() + }) + let sortedLastSearch = lastSearchFriend.sorted(by: { + $0.friend!.name!.lowercased().folding(options: .diacriticInsensitive, locale: .current) + < + $1.friend!.name!.lowercased().folding(options: .diacriticInsensitive, locale: .current) + }) + + var addedAvatarListModel : [ContactAvatarModel] = [] + sortedLastSearch.forEach { searchResult in + if searchResult.friend != nil { + addedAvatarListModel.append( + ContactAvatarModel( + friend: searchResult.friend!, + name: searchResult.friend?.name ?? "", + address: searchResult.friend?.address?.clone()?.asStringUriOnly() ?? "", + withPresence: true + ) + ) + } + } DispatchQueue.main.async { - self.contactsManager.lastSearch = lastSearchFriend.sorted(by: { - $0.friend!.name!.lowercased().folding(options: .diacriticInsensitive, locale: .current) - < - $1.friend!.name!.lowercased().folding(options: .diacriticInsensitive, locale: .current) - }) - - self.contactsManager.lastSearchSuggestions = lastSearchSuggestions.sorted(by: { - $0.address!.asStringUriOnly() < $1.address!.asStringUriOnly() - }) + self.contactsManager.lastSearch = sortedLastSearch + self.contactsManager.lastSearchSuggestions = lastSearchSuggestions self.contactsManager.avatarListModel.forEach { contactAvatarModel in contactAvatarModel.removeAllSuscription() } - self.contactsManager.avatarListModel.removeAll() - - self.contactsManager.lastSearch.forEach { searchResult in - if searchResult.friend != nil { - self.contactsManager.avatarListModel.append( - ContactAvatarModel( - friend: searchResult.friend!, - name: searchResult.friend?.name ?? "", - address: searchResult.friend?.address?.clone()?.asStringUriOnly() ?? "", - withPresence: true - ) - ) - } - } + self.contactsManager.avatarListModel += addedAvatarListModel NotificationCenter.default.post(name: NSNotification.Name("ContactLoaded"), object: nil) }