From 940227dc9274461523edbc1d366b09758b8c9a4a Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 6 Nov 2024 09:58:03 +0100 Subject: [PATCH] Fix contacts not showing : avoid using default friends list that can be set to the ldap_friends list (if we get ldap before having any contacts). --- Linphone/core/friend/FriendCore.cpp | 4 ++-- Linphone/model/tool/ToolModel.cpp | 34 +++++++++++++++++++---------- Linphone/model/tool/ToolModel.hpp | 6 ++++- Linphone/tool/Utils.cpp | 4 ++-- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/Linphone/core/friend/FriendCore.cpp b/Linphone/core/friend/FriendCore.cpp index 65ba8265..a4f362a3 100644 --- a/Linphone/core/friend/FriendCore.cpp +++ b/Linphone/core/friend/FriendCore.cpp @@ -99,7 +99,7 @@ FriendCore::FriendCore(const std::shared_ptr &contact) : QObje mStarred = false; } - mIsLdap = ToolModel::friendIsInLdapFriendList(contact); + mIsLdap = ToolModel::friendIsInFriendList(ToolModel::getLdapFriendList(), contact); connect(this, &FriendCore::addressChanged, &FriendCore::allAddressesChanged); connect(this, &FriendCore::phoneNumberChanged, &FriendCore::allAddressesChanged); } @@ -636,7 +636,7 @@ void FriendCore::save() { // Save Values to model mVCardString = mFriendModel->getVCardAsString(); auto carddavListForNewFriends = SettingsModel::getCarddavListForNewFriends(); auto listWhereToAddFriend = carddavListForNewFriends != nullptr ? carddavListForNewFriends - : core->getDefaultFriendList(); + : ToolModel::getAppFriendList(); bool created = (listWhereToAddFriend->addFriend(contact) == linphone::FriendList::Status::OK); if (created) { listWhereToAddFriend->updateSubscriptions(); diff --git a/Linphone/model/tool/ToolModel.cpp b/Linphone/model/tool/ToolModel.cpp index 390881d8..be1b1fa0 100644 --- a/Linphone/model/tool/ToolModel.cpp +++ b/Linphone/model/tool/ToolModel.cpp @@ -276,21 +276,33 @@ bool ToolModel::isLocal(const std::shared_ptr &conference, return deviceAddress->equal(gruuAddress); } -std::shared_ptr ToolModel::getLdapFriendList() { +std::shared_ptr ToolModel::getFriendList(const std::string &listName) { auto core = CoreModel::getInstance()->getCore(); - auto ldapFriendList = core->getFriendListByName("ldap_friends"); - if (!ldapFriendList) { - ldapFriendList = core->createFriendList(); - ldapFriendList->setDisplayName("ldap_friends"); - core->addFriendList(ldapFriendList); + auto friendList = core->getFriendListByName(listName); + if (!friendList) { + friendList = core->createFriendList(); + friendList->setDisplayName(listName); + core->addFriendList(friendList); } - return ldapFriendList; + return friendList; } -bool ToolModel::friendIsInLdapFriendList(const std::shared_ptr &f) { - auto ldapFriendList = getLdapFriendList(); - for (auto ldapFriend : ldapFriendList->getFriends()) { - if (f == ldapFriend) return true; +std::shared_ptr ToolModel::getAppFriendList() { + return getFriendList("app_friends"); +} + +std::shared_ptr ToolModel::getLdapFriendList() { + return getFriendList("ldap_friends"); +} + +bool ToolModel::friendIsInFriendList(const std::shared_ptr &friendList, + const std::shared_ptr &f) { + for (auto contact : friendList->getFriends()) { + if (f == contact) { + qWarning() << Utils::coreStringToAppString(f->getAddress()->asStringUriOnly()) << " / " + << Utils::coreStringToAppString(contact->getAddress()->asStringUriOnly()); + return true; + } } return false; } diff --git a/Linphone/model/tool/ToolModel.hpp b/Linphone/model/tool/ToolModel.hpp index 5ed0cb0b..5b90155e 100644 --- a/Linphone/model/tool/ToolModel.hpp +++ b/Linphone/model/tool/ToolModel.hpp @@ -59,8 +59,12 @@ public: linphone::MediaEncryption = linphone::MediaEncryption::None, QString *errorMessage = nullptr); + static std::shared_ptr getFriendList(const std::string &listName); + static std::shared_ptr getAppFriendList(); static std::shared_ptr getLdapFriendList(); - static bool friendIsInLdapFriendList(const std::shared_ptr &f); + + static bool friendIsInFriendList(const std::shared_ptr &friendList, + const std::shared_ptr &f); private: DECLARE_ABSTRACT_OBJECT diff --git a/Linphone/tool/Utils.cpp b/Linphone/tool/Utils.cpp index d00db6d6..65bd822d 100644 --- a/Linphone/tool/Utils.cpp +++ b/Linphone/tool/Utils.cpp @@ -371,7 +371,7 @@ VariantObject *Utils::findAvatarByAddress(const QString &address) { if (!data) return nullptr; data->makeRequest([address]() -> QVariant { QString avatar; - auto defaultFriendList = CoreModel::getInstance()->getCore()->getDefaultFriendList(); + auto defaultFriendList = ToolModel::getAppFriendList(); if (!defaultFriendList) return QVariant(); auto linphoneAddr = ToolModel::interpretUrl(address); auto linFriend = CoreModel::getInstance()->getCore()->findFriend(linphoneAddr); @@ -399,7 +399,7 @@ VariantObject *Utils::getFriendAddressSecurityLevel(const QString &address) { VariantObject *data = new VariantObject(); if (!data) return nullptr; data->makeRequest([address]() { - auto defaultFriendList = CoreModel::getInstance()->getCore()->getDefaultFriendList(); + auto defaultFriendList = ToolModel::getAppFriendList(); if (!defaultFriendList) return QVariant(); auto linphoneAddr = ToolModel::interpretUrl(address); auto linFriend = CoreModel::getInstance()->getCore()->findFriend(linphoneAddr);