From 5a0dd7216e854d417ccfcde1aaf3665e831f9797 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 13 Mar 2024 17:30:48 +0100 Subject: [PATCH] Fix wrong address on contact edition. Fix wrong avatar initials in contact details and fix synchronization. Make only one contact search and filter results on each lists. Fix contact aggregation. --- Linphone/core/friend/FriendCore.cpp | 14 ++++++++- Linphone/core/variant/VariantList.cpp | 8 ++--- Linphone/core/variant/VariantList.hpp | 6 ++-- Linphone/view/App/Layout/ContactLayout.qml | 4 +-- Linphone/view/Item/Call/CallContactsLists.qml | 3 ++ Linphone/view/Item/Contact/ContactsList.qml | 16 +++++----- Linphone/view/Page/Main/ContactPage.qml | 30 ++++++------------- 7 files changed, 43 insertions(+), 38 deletions(-) diff --git a/Linphone/core/friend/FriendCore.cpp b/Linphone/core/friend/FriendCore.cpp index cec514dd7..e1f5db115 100644 --- a/Linphone/core/friend/FriendCore.cpp +++ b/Linphone/core/friend/FriendCore.cpp @@ -458,7 +458,19 @@ void FriendCore::remove() { } } -void FriendCore::save() { // Save Values to model +void FriendCore::save() { // Save Values to model + if (mAddressList.size() > 0) { + auto it = std::find_if(mAddressList.begin(), mAddressList.end(), [this](const QVariant &a) { + return a.toMap()["address"].toString() == mDefaultAddress; + }); + if (it == mAddressList.end()) { + mDefaultAddress = mAddressList[0].toMap()["address"].toString(); + emit defaultAddressChanged(); + } + } else { + mDefaultAddress = ""; + emit defaultAddressChanged(); + } FriendCore *thisCopy = new FriendCore(*this); // Pointer to avoid multiple copies in lambdas if (mFriendModel) { diff --git a/Linphone/core/variant/VariantList.cpp b/Linphone/core/variant/VariantList.cpp index 18bfe28a1..602033638 100644 --- a/Linphone/core/variant/VariantList.cpp +++ b/Linphone/core/variant/VariantList.cpp @@ -26,7 +26,7 @@ VariantList::VariantList(QObject *parent) { } VariantList::VariantList(QList list, QObject *parent) { - set(list); + setModel(list); } VariantList::~VariantList() { @@ -36,11 +36,11 @@ int VariantList::rowCount(const QModelIndex &parent) const { return mList.count(); } -void VariantList::set(QList list) { +void VariantList::setModel(QList list) { beginResetModel(); mList = list; endResetModel(); - emit listModelChanged(); + emit modelChanged(); } void VariantList::replace(int index, QVariant newValue) { @@ -52,4 +52,4 @@ QVariant VariantList::data(const QModelIndex &index, int role) const { if (!index.isValid() || row < 0 || row >= mList.count()) return QVariant(); if (role == Qt::DisplayRole) return mList[row]; return QVariant(); -} \ No newline at end of file +} diff --git a/Linphone/core/variant/VariantList.hpp b/Linphone/core/variant/VariantList.hpp index 0ddd809b6..cbc75c642 100644 --- a/Linphone/core/variant/VariantList.hpp +++ b/Linphone/core/variant/VariantList.hpp @@ -31,13 +31,13 @@ class VariantList : public AbstractListProxy, public AbstractObject { Q_OBJECT - Q_PROPERTY(QList model WRITE set NOTIFY listModelChanged) + Q_PROPERTY(QList model WRITE setModel NOTIFY modelChanged) public: VariantList(QObject *parent = Q_NULLPTR); VariantList(QList list, QObject *parent = Q_NULLPTR); ~VariantList(); - void set(QList list); + void setModel(QList list); void replace(int index, QVariant newValue); @@ -46,7 +46,7 @@ public: virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; signals: - void listModelChanged(); + void modelChanged(); private: DECLARE_ABSTRACT_OBJECT diff --git a/Linphone/view/App/Layout/ContactLayout.qml b/Linphone/view/App/Layout/ContactLayout.qml index 0cf068ef6..699bd3099 100644 --- a/Linphone/view/App/Layout/ContactLayout.qml +++ b/Linphone/view/App/Layout/ContactLayout.qml @@ -9,7 +9,7 @@ ColumnLayout { id: mainItem spacing: 30 * DefaultStyle.dp - property var contact + property FriendGui contact property string contactAddress: contact && contact.core.defaultAddress || "" property string contactName: contact && contact.core.displayName || "" @@ -61,7 +61,7 @@ ColumnLayout { width: 100 * DefaultStyle.dp height: 100 * DefaultStyle.dp contact: mainItem.contact || null - address: !contact && mainItem.contactAddress || mainItem.contactName + address: mainItem.contactAddress || mainItem.contactName } Item { id: rightButton diff --git a/Linphone/view/Item/Call/CallContactsLists.qml b/Linphone/view/Item/Call/CallContactsLists.qml index f04e785f5..23f289c67 100644 --- a/Linphone/view/Item/Call/CallContactsLists.qml +++ b/Linphone/view/Item/Call/CallContactsLists.qml @@ -229,6 +229,9 @@ Item { Layout.fillWidth: true contactMenuVisible: false searchBarText: searchBar.text + model: MagicSearchProxy { + searchText: searchBarText.length === 0 ? "*" : searchBarText + } onContactSelected: (contact) => { if (contact.core.allAddresses.length > 1) { startCallPopup.contact = contact diff --git a/Linphone/view/Item/Contact/ContactsList.qml b/Linphone/view/Item/Contact/ContactsList.qml index b490cbcd4..1de6edeb7 100644 --- a/Linphone/view/Item/Contact/ContactsList.qml +++ b/Linphone/view/Item/Contact/ContactsList.qml @@ -8,7 +8,7 @@ ListView { id: mainItem Layout.preferredHeight: contentHeight height: contentHeight - visible: count > 0 + visible: contentHeight > 0 clip: true property string searchBarText @@ -17,7 +17,7 @@ ListView { property bool contactMenuVisible: true property bool initialHeadersVisible: true property bool displayNameCapitalization: true - + property bool showOnlyFavourites: false property int delegateLeftMargin: 0 currentIndex: -1 @@ -33,20 +33,22 @@ ListView { signal contactSelected(var contact) signal contactStarredChanged() signal contactDeletionRequested(FriendGui contact) - - onContactStarredChanged: model.forceUpdate() - + model: MagicSearchProxy { - searchText: searchBarText.length === 0 ? "*" : searchBarText + searchText: searchBarText.length === 0 ? "*" : searchBarText } + delegate: Item { id: itemDelegate - height: 56 * DefaultStyle.dp + height: display ? 56 * DefaultStyle.dp : 0 width: mainItem.width property var previousItem : mainItem.model.count > 0 && index > 0 ? mainItem.model.getAt(index-1) : null property var previousDisplayName: previousItem ? previousItem.core.displayName : "" property var displayName: modelData.core.displayName + property bool display: !mainItem.showOnlyFavourites || modelData.core.starred + + visible: display Connections { target: modelData.core onStarredChanged: mainItem.contactStarredChanged() diff --git a/Linphone/view/Page/Main/ContactPage.qml b/Linphone/view/Page/Main/ContactPage.qml index 5931a4903..0795f4472 100644 --- a/Linphone/view/Page/Main/ContactPage.qml +++ b/Linphone/view/Page/Main/ContactPage.qml @@ -44,6 +44,11 @@ AbstractMainPage { function goToNewCall() { listStackView.replace(newCallItem) } + + property MagicSearchProxy allFriends: MagicSearchProxy { + searchText: searchBar.text.length === 0 ? "*" : searchBar.text + aggregationFlag: LinphoneEnums.MagicSearchAggregation.Friend + } Dialog { id: dialog @@ -139,7 +144,7 @@ AbstractMainPage { Layout.alignment: Qt.AlignHCenter } ColumnLayout { - visible: favoriteList.count > 0 + visible: favoriteList.contentHeight > 0 RowLayout { Text { text: qsTr("Favoris") @@ -163,18 +168,8 @@ AbstractMainPage { id: favoriteList hoverEnabled: mainItem.leftPanelEnabled Layout.fillWidth: true - onContactStarredChanged: contactList.model.forceUpdate() - Connections { - target: mainItem - onForceListsUpdate: { - contactList.model.forceUpdate() - } - } - model: MagicSearchProxy { - searchText: searchBar.text.length === 0 ? "*" : searchBar.text - sourceFlags: LinphoneEnums.MagicSearchSource.FavoriteFriends - aggregationFlag: LinphoneEnums.MagicSearchAggregation.Friend - } + showOnlyFavourites: true + model: allFriends onSelectedContactChanged: { if (selectedContact) { contactList.currentIndex = -1 @@ -214,13 +209,7 @@ AbstractMainPage { hoverEnabled: mainItem.leftPanelEnabled Layout.fillWidth: true searchBarText: searchBar.text - onContactStarredChanged: favoriteList.model.forceUpdate() - Connections { - target: mainItem - onForceListsUpdate: { - contactList.model.forceUpdate() - } - } + model: allFriends onSelectedContactChanged: { if (selectedContact) { favoriteList.currentIndex = -1 @@ -290,7 +279,6 @@ AbstractMainPage { model: VariantList { model: mainItem.selectedContact ? mainItem.selectedContact.core.allAddresses : [] } - // model: contactDetail.selectedContact && contactDetail.selectedContact.core.addresses delegate: Item { width: addrList.width height: 70 * DefaultStyle.dp