From 8d8966407a9abfd02e5dcd79f568d5f2bc0b91c1 Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Tue, 10 Sep 2024 17:14:02 +0200 Subject: [PATCH] Replace publisher with delegate in ContactAvatarModel --- .../Contacts/Model/ContactAvatarModel.swift | 35 ++++++++++--------- Linphone/Utils/MagicSearchSingleton.swift | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift b/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift index 46b2f0381..4938ae238 100644 --- a/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift +++ b/Linphone/UI/Main/Contacts/Model/ContactAvatarModel.swift @@ -39,7 +39,7 @@ class ContactAvatarModel: ObservableObject { @Published var presenceStatus: ConsolidatedPresence - private var friendSuscription: AnyCancellable? + private var friendDelegate: FriendDelegate? init(friend: Friend?, name: String, address: String, withPresence: Bool?) { self.friend = friend @@ -71,27 +71,26 @@ class ContactAvatarModel: ObservableObject { self.lastPresenceInfo = "" } - if self.friendSuscription != nil { - self.friendSuscription = nil + if let delegate = friendDelegate { + self.friend?.removeDelegate(delegate: delegate) + self.friendDelegate = nil } - addSubscription() + addFriendDelegate() } else { self.lastPresenceInfo = "" self.presenceStatus = .Offline } } - func addSubscription() { - friendSuscription = self.friend?.publisher?.onPresenceReceived?.postOnCoreQueue { (cbValue: (Friend)) in - - let latestActivityTimestamp = cbValue.presenceModel?.latestActivityTimestamp ?? -1 - + func addFriendDelegate() { + friendDelegate = FriendDelegateStub(onPresenceReceived: { (friend: Friend) in + let latestActivityTimestamp = friend.presenceModel?.latestActivityTimestamp ?? -1 DispatchQueue.main.async { - self.presenceStatus = cbValue.consolidatedPresence - if cbValue.consolidatedPresence == .Online || cbValue.consolidatedPresence == .Busy { - if cbValue.consolidatedPresence == .Online || latestActivityTimestamp != -1 { - self.lastPresenceInfo = cbValue.consolidatedPresence == .Online ? + self.presenceStatus = friend.consolidatedPresence + if friend.consolidatedPresence == .Online || friend.consolidatedPresence == .Busy { + if friend.consolidatedPresence == .Online || latestActivityTimestamp != -1 { + self.lastPresenceInfo = friend.consolidatedPresence == .Online ? "Online" : self.getCallTime(startDate: latestActivityTimestamp) } else { self.lastPresenceInfo = "Away" @@ -100,13 +99,15 @@ class ContactAvatarModel: ObservableObject { self.lastPresenceInfo = "" } } - } + }) + friend?.addDelegate(delegate: friendDelegate!) } - func removeAllSuscription() { - if friendSuscription != nil { + func removeFriendDelegate() { + if let delegate = friendDelegate { presenceStatus = .Offline - friendSuscription = nil + friend?.removeDelegate(delegate: delegate) + friendDelegate = nil } } diff --git a/Linphone/Utils/MagicSearchSingleton.swift b/Linphone/Utils/MagicSearchSingleton.swift index 223a9378f..2ad37e30e 100644 --- a/Linphone/Utils/MagicSearchSingleton.swift +++ b/Linphone/Utils/MagicSearchSingleton.swift @@ -95,7 +95,7 @@ final class MagicSearchSingleton: ObservableObject { self.contactsManager.lastSearchSuggestions = lastSearchSuggestions self.contactsManager.avatarListModel.forEach { contactAvatarModel in - contactAvatarModel.removeAllSuscription() + contactAvatarModel.removeFriendDelegate() } self.contactsManager.avatarListModel.removeAll() self.contactsManager.avatarListModel += addedAvatarListModel