Chat list fixes:

Force chat list to update when updating proxy sourceModel (otherwise list can be empty)
Clear mList before anything else when updating chat list (may fix chat connection crash)
This commit is contained in:
Gaelle Braud 2026-02-23 10:52:27 +01:00
parent 226547d199
commit 2ae5bb9cec
7 changed files with 40 additions and 37 deletions

View file

@ -729,7 +729,7 @@ void App::initCore() {
mEngine->setObjectOwnership(settings.get(), QQmlEngine::CppOwnership);
mEngine->setObjectOwnership(this, QQmlEngine::CppOwnership);
connect(this, &App::coreStartedChanged, this, [this] {
auto initLists = [this] {
if (mCoreStarted) {
if (!mAccountList) setAccountList(AccountList::create());
else {
@ -753,7 +753,10 @@ void App::initCore() {
else mChatList->lUpdate();
disconnect(this, &App::coreStartedChanged, this, nullptr);
}
});
};
if (mCoreStarted) {
initLists();
} else connect(this, &App::coreStartedChanged, this, initLists);
// if (!mSettings) {
mSettings = settings;

View file

@ -103,6 +103,7 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
}
setIsUpdating(true);
beginResetModel();
mList.clear();
mModelConnection->invokeToModel([this]() {
mustBeInLinphoneThread(getClassName());
// Avoid copy to lambdas
@ -127,7 +128,6 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
disconnectItem(chat);
}
}
mList.clear();
for (auto &chat : *chats) {
connectItem(chat);
mList.append(chat);

View file

@ -51,6 +51,7 @@ void ChatProxy::setSourceModel(QAbstractItemModel *model) {
}
});
connect(newChatList, &ChatList::dataChanged, this, [this] { invalidate(); });
newChatList->lUpdate();
}
QSortFilterProxyModel::setSourceModel(newChatList);
sort(0);

View file

@ -2101,65 +2101,65 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="266"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="267"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="268"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="269"/>
<source>chat_message_draft_sending_text</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="414"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="415"/>
<source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Löschen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="353"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="354"/>
<source>chat_room_mute</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="352"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="353"/>
<source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="366"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="367"/>
<source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="385"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="386"/>
<source>chat_room_leave</source>
<extracomment>&quot;leave&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="391"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="392"/>
<source>chat_list_leave_chat_popup_title</source>
<extracomment>leave the conversation ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="393"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="394"/>
<source>chat_list_leave_chat_popup_message</source>
<extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="420"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="421"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="422"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="423"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation>

View file

@ -2094,65 +2094,65 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="266"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="267"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="268"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="269"/>
<source>chat_message_draft_sending_text</source>
<translation>Draft : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="414"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="415"/>
<source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="353"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="354"/>
<source>chat_room_mute</source>
<translation>Mute</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="352"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="353"/>
<source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment>
<translation>Unmute</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="366"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="367"/>
<source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment>
<translation>Mark as read</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="385"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="386"/>
<source>chat_room_leave</source>
<extracomment>&quot;leave&quot;</extracomment>
<translation>Leave</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="391"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="392"/>
<source>chat_list_leave_chat_popup_title</source>
<extracomment>leave the conversation ?</extracomment>
<translation>Leave the conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="393"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="394"/>
<source>chat_list_leave_chat_popup_message</source>
<extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment>
<translation>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="420"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="421"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation>Delete the conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="422"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="423"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>This conversation and all its messages will be deleted. Do You want to continue ?</translation>

View file

@ -2069,65 +2069,65 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="266"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="267"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="268"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="269"/>
<source>chat_message_draft_sending_text</source>
<translation>Brouillon : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="414"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="415"/>
<source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="353"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="354"/>
<source>chat_room_mute</source>
<translation>Mettre en sourdine</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="352"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="353"/>
<source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment>
<translation>Enlever la sourdine </translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="366"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="367"/>
<source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment>
<translation>Marquer comme lu</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="385"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="386"/>
<source>chat_room_leave</source>
<extracomment>&quot;leave&quot;</extracomment>
<translation>Quitter la conversation</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="391"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="392"/>
<source>chat_list_leave_chat_popup_title</source>
<extracomment>leave the conversation ?</extracomment>
<translation>Quitter la conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="393"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="394"/>
<source>chat_list_leave_chat_popup_message</source>
<extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment>
<translation>Vous ne pourrez plus envoyer ou recevoir de messages dans cette conversation. Souhaitez-vous continuer ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="420"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="421"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation>Supprimer la conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="422"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="423"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ?</translation>

View file

@ -76,7 +76,6 @@ ListView {
onAtYEndChanged: if(atYEnd) confInfoProxy.displayMore()
Component.onCompleted: {
console.log("meeting list view completed invalidate")
confInfoProxy.invalidate()
}