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.
This commit is contained in:
Julien Wadel 2024-03-13 17:30:48 +01:00
parent 6d96359b0a
commit 5a0dd7216e
7 changed files with 43 additions and 38 deletions

View file

@ -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 FriendCore *thisCopy = new FriendCore(*this); // Pointer to avoid multiple copies in lambdas
if (mFriendModel) { if (mFriendModel) {

View file

@ -26,7 +26,7 @@ VariantList::VariantList(QObject *parent) {
} }
VariantList::VariantList(QList<QVariant> list, QObject *parent) { VariantList::VariantList(QList<QVariant> list, QObject *parent) {
set(list); setModel(list);
} }
VariantList::~VariantList() { VariantList::~VariantList() {
@ -36,11 +36,11 @@ int VariantList::rowCount(const QModelIndex &parent) const {
return mList.count(); return mList.count();
} }
void VariantList::set(QList<QVariant> list) { void VariantList::setModel(QList<QVariant> list) {
beginResetModel(); beginResetModel();
mList = list; mList = list;
endResetModel(); endResetModel();
emit listModelChanged(); emit modelChanged();
} }
void VariantList::replace(int index, QVariant newValue) { 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 (!index.isValid() || row < 0 || row >= mList.count()) return QVariant();
if (role == Qt::DisplayRole) return mList[row]; if (role == Qt::DisplayRole) return mList[row];
return QVariant(); return QVariant();
} }

View file

@ -31,13 +31,13 @@
class VariantList : public AbstractListProxy<QVariant>, public AbstractObject { class VariantList : public AbstractListProxy<QVariant>, public AbstractObject {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QList<QVariant> model WRITE set NOTIFY listModelChanged) Q_PROPERTY(QList<QVariant> model WRITE setModel NOTIFY modelChanged)
public: public:
VariantList(QObject *parent = Q_NULLPTR); VariantList(QObject *parent = Q_NULLPTR);
VariantList(QList<QVariant> list, QObject *parent = Q_NULLPTR); VariantList(QList<QVariant> list, QObject *parent = Q_NULLPTR);
~VariantList(); ~VariantList();
void set(QList<QVariant> list); void setModel(QList<QVariant> list);
void replace(int index, QVariant newValue); void replace(int index, QVariant newValue);
@ -46,7 +46,7 @@ public:
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
signals: signals:
void listModelChanged(); void modelChanged();
private: private:
DECLARE_ABSTRACT_OBJECT DECLARE_ABSTRACT_OBJECT

View file

@ -9,7 +9,7 @@ ColumnLayout {
id: mainItem id: mainItem
spacing: 30 * DefaultStyle.dp spacing: 30 * DefaultStyle.dp
property var contact property FriendGui contact
property string contactAddress: contact && contact.core.defaultAddress || "" property string contactAddress: contact && contact.core.defaultAddress || ""
property string contactName: contact && contact.core.displayName || "" property string contactName: contact && contact.core.displayName || ""
@ -61,7 +61,7 @@ ColumnLayout {
width: 100 * DefaultStyle.dp width: 100 * DefaultStyle.dp
height: 100 * DefaultStyle.dp height: 100 * DefaultStyle.dp
contact: mainItem.contact || null contact: mainItem.contact || null
address: !contact && mainItem.contactAddress || mainItem.contactName address: mainItem.contactAddress || mainItem.contactName
} }
Item { Item {
id: rightButton id: rightButton

View file

@ -229,6 +229,9 @@ Item {
Layout.fillWidth: true Layout.fillWidth: true
contactMenuVisible: false contactMenuVisible: false
searchBarText: searchBar.text searchBarText: searchBar.text
model: MagicSearchProxy {
searchText: searchBarText.length === 0 ? "*" : searchBarText
}
onContactSelected: (contact) => { onContactSelected: (contact) => {
if (contact.core.allAddresses.length > 1) { if (contact.core.allAddresses.length > 1) {
startCallPopup.contact = contact startCallPopup.contact = contact

View file

@ -8,7 +8,7 @@ ListView {
id: mainItem id: mainItem
Layout.preferredHeight: contentHeight Layout.preferredHeight: contentHeight
height: contentHeight height: contentHeight
visible: count > 0 visible: contentHeight > 0
clip: true clip: true
property string searchBarText property string searchBarText
@ -17,7 +17,7 @@ ListView {
property bool contactMenuVisible: true property bool contactMenuVisible: true
property bool initialHeadersVisible: true property bool initialHeadersVisible: true
property bool displayNameCapitalization: true property bool displayNameCapitalization: true
property bool showOnlyFavourites: false
property int delegateLeftMargin: 0 property int delegateLeftMargin: 0
currentIndex: -1 currentIndex: -1
@ -33,20 +33,22 @@ ListView {
signal contactSelected(var contact) signal contactSelected(var contact)
signal contactStarredChanged() signal contactStarredChanged()
signal contactDeletionRequested(FriendGui contact) signal contactDeletionRequested(FriendGui contact)
onContactStarredChanged: model.forceUpdate()
model: MagicSearchProxy { model: MagicSearchProxy {
searchText: searchBarText.length === 0 ? "*" : searchBarText searchText: searchBarText.length === 0 ? "*" : searchBarText
} }
delegate: Item { delegate: Item {
id: itemDelegate id: itemDelegate
height: 56 * DefaultStyle.dp height: display ? 56 * DefaultStyle.dp : 0
width: mainItem.width width: mainItem.width
property var previousItem : mainItem.model.count > 0 && index > 0 ? mainItem.model.getAt(index-1) : null property var previousItem : mainItem.model.count > 0 && index > 0 ? mainItem.model.getAt(index-1) : null
property var previousDisplayName: previousItem ? previousItem.core.displayName : "" property var previousDisplayName: previousItem ? previousItem.core.displayName : ""
property var displayName: modelData.core.displayName property var displayName: modelData.core.displayName
property bool display: !mainItem.showOnlyFavourites || modelData.core.starred
visible: display
Connections { Connections {
target: modelData.core target: modelData.core
onStarredChanged: mainItem.contactStarredChanged() onStarredChanged: mainItem.contactStarredChanged()

View file

@ -44,6 +44,11 @@ AbstractMainPage {
function goToNewCall() { function goToNewCall() {
listStackView.replace(newCallItem) listStackView.replace(newCallItem)
} }
property MagicSearchProxy allFriends: MagicSearchProxy {
searchText: searchBar.text.length === 0 ? "*" : searchBar.text
aggregationFlag: LinphoneEnums.MagicSearchAggregation.Friend
}
Dialog { Dialog {
id: dialog id: dialog
@ -139,7 +144,7 @@ AbstractMainPage {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
} }
ColumnLayout { ColumnLayout {
visible: favoriteList.count > 0 visible: favoriteList.contentHeight > 0
RowLayout { RowLayout {
Text { Text {
text: qsTr("Favoris") text: qsTr("Favoris")
@ -163,18 +168,8 @@ AbstractMainPage {
id: favoriteList id: favoriteList
hoverEnabled: mainItem.leftPanelEnabled hoverEnabled: mainItem.leftPanelEnabled
Layout.fillWidth: true Layout.fillWidth: true
onContactStarredChanged: contactList.model.forceUpdate() showOnlyFavourites: true
Connections { model: allFriends
target: mainItem
onForceListsUpdate: {
contactList.model.forceUpdate()
}
}
model: MagicSearchProxy {
searchText: searchBar.text.length === 0 ? "*" : searchBar.text
sourceFlags: LinphoneEnums.MagicSearchSource.FavoriteFriends
aggregationFlag: LinphoneEnums.MagicSearchAggregation.Friend
}
onSelectedContactChanged: { onSelectedContactChanged: {
if (selectedContact) { if (selectedContact) {
contactList.currentIndex = -1 contactList.currentIndex = -1
@ -214,13 +209,7 @@ AbstractMainPage {
hoverEnabled: mainItem.leftPanelEnabled hoverEnabled: mainItem.leftPanelEnabled
Layout.fillWidth: true Layout.fillWidth: true
searchBarText: searchBar.text searchBarText: searchBar.text
onContactStarredChanged: favoriteList.model.forceUpdate() model: allFriends
Connections {
target: mainItem
onForceListsUpdate: {
contactList.model.forceUpdate()
}
}
onSelectedContactChanged: { onSelectedContactChanged: {
if (selectedContact) { if (selectedContact) {
favoriteList.currentIndex = -1 favoriteList.currentIndex = -1
@ -290,7 +279,6 @@ AbstractMainPage {
model: VariantList { model: VariantList {
model: mainItem.selectedContact ? mainItem.selectedContact.core.allAddresses : [] model: mainItem.selectedContact ? mainItem.selectedContact.core.allAddresses : []
} }
// model: contactDetail.selectedContact && contactDetail.selectedContact.core.addresses
delegate: Item { delegate: Item {
width: addrList.width width: addrList.width
height: 70 * DefaultStyle.dp height: 70 * DefaultStyle.dp