Merge branch 'fix/6.1' into 'release/6.1'

Fixes

See merge request BC/public/linphone-desktop!1661
This commit is contained in:
Gaëlle Braud 2026-01-26 16:31:29 +00:00
commit 83cc37c819
14 changed files with 65 additions and 43 deletions

View file

@ -230,9 +230,11 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
});
}
});
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageRead, [this]() {
mChatMessageModelConnection->invokeToCore([this] { setIsRead(true); });
});
mChatMessageModelConnection->makeConnectToModel(
&ChatMessageModel::messageRead, [this](const std::shared_ptr<linphone::ChatMessage> &chatMessage) {
bool isRead = chatMessage->isRead();
mChatMessageModelConnection->invokeToCore([this, isRead] { setIsRead(isRead); });
});
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lSendReaction, [this](const QString &reaction) {
mChatMessageModelConnection->invokeToModel([this, reaction] { mChatMessageModel->sendReaction(reaction); });
});

View file

@ -298,12 +298,14 @@ void EventLogList::setSelf(QSharedPointer<EventLogList> me) {
if (!mChatCore) {
endResetModel();
setIsUpdating(false);
emit modelUpdated();
return;
}
auto chatModel = mChatCore->getModel();
if (!chatModel) {
endResetModel();
setIsUpdating(false);
emit modelUpdated();
return;
}
mCoreModelConnection->invokeToModel([this, chatModel]() {
@ -321,6 +323,7 @@ void EventLogList::setSelf(QSharedPointer<EventLogList> me) {
}
endResetModel();
setIsUpdating(false);
emit modelUpdated();
});
});
});

View file

@ -67,6 +67,7 @@ public:
signals:
void lUpdate();
void modelUpdated();
void filterChanged(QString filter);
void eventInsertedByUser(int index);
void messageWithFilterFound(int index);

View file

@ -57,6 +57,7 @@ void EventLogProxy::setSourceModel(QAbstractItemModel *model) {
int proxyIndex = mapFromSource(newEventLogList->index(i, 0)).row();
emit eventInsertedByUser(proxyIndex);
});
connect(newEventLogList, &EventLogList::modelUpdated, this, &EventLogProxy::modelUpdated);
}
QSortFilterProxyModel::setSourceModel(model);
}

View file

@ -87,6 +87,7 @@ signals:
void maxDisplayItemsChanged();
void displayItemsStepChanged();
void filterTextChanged();
void modelUpdated();
protected:
QSharedPointer<EventLogList> mList;

View file

@ -49,7 +49,7 @@ MagicSearchList::~MagicSearchList() {
mustBeInMainThread("~" + getClassName());
}
void MagicSearchList::setSelf(QSharedPointer<MagicSearchList> me) {
void MagicSearchList::setSelf(const QSharedPointer<MagicSearchList> &me) {
mCoreModelConnection = SafeConnection<MagicSearchList, CoreModel>::create(me, CoreModel::getInstance());
mCoreModelConnection->makeConnectToModel(
&CoreModel::friendCreated, [this](const std::shared_ptr<linphone::Friend> &f) {

View file

@ -40,7 +40,7 @@ public:
MagicSearchList(QObject *parent = Q_NULLPTR);
~MagicSearchList();
void setSelf(QSharedPointer<MagicSearchList> me);
void setSelf(const QSharedPointer<MagicSearchList> &me);
void connectContact(FriendCore *data);
void setSearch(const QString &search);
void setResults(const QList<QSharedPointer<FriendCore>> &contacts);

View file

@ -2472,44 +2472,44 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="107"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="118"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="110"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="121"/>
<source>popup_info_find_message_title</source>
<extracomment>Find message</extracomment>
<translation>Nachricht suchen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="120"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="123"/>
<source>info_popup_no_result_message</source>
<extracomment>No result found</extracomment>
<translation>Keine Ergebnisse gefunden</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="112"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/>
<source>info_popup_first_result_message</source>
<extracomment>First result reached</extracomment>
<translation>Erstes Ergebnis erreicht</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="110"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="113"/>
<source>info_popup_last_result_message</source>
<extracomment>Last result reached</extracomment>
<translation>Letztes Ergebnis erreicht</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="157"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="160"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>Ende-zu-Ende-verschlüsselter Chat</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="159"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="162"/>
<source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment>
<translation>Dieser Chat ist nicht verschlüsselt!</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="170"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="173"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Messages in this conversation are e2e encrypted.
Only your correspondent can decrypt them.</extracomment>
@ -2517,7 +2517,7 @@ Error</extracomment>
Nur Ihr Gesprächspartner kann sie entschlüsseln.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="172"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="175"/>
<source>chat_message_list_not_encrypted_header_message</source>
<extracomment>Messages are not end to end encrypted,
may sure you don&apos;t share any sensitive information !</extracomment>
@ -2525,7 +2525,7 @@ Nur Ihr Gesprächspartner kann sie entschlüsseln.</translation>
Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen!</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="212"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="215"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 schreibt</translation>

View file

@ -2430,44 +2430,44 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="107"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="118"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="110"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="121"/>
<source>popup_info_find_message_title</source>
<extracomment>Find message</extracomment>
<translation>Find message</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="120"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="123"/>
<source>info_popup_no_result_message</source>
<extracomment>No result found</extracomment>
<translation>No result found</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="112"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/>
<source>info_popup_first_result_message</source>
<extracomment>First result reached</extracomment>
<translation>First result reached</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="110"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="113"/>
<source>info_popup_last_result_message</source>
<extracomment>Last result reached</extracomment>
<translation>Last result reached</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="157"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="160"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>End to end encrypted chat</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="159"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="162"/>
<source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment>
<translation>This conversation is not encrypted !</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="170"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="173"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Messages in this conversation are e2e encrypted.
Only your correspondent can decrypt them.</extracomment>
@ -2475,7 +2475,7 @@ Error</extracomment>
Only your correspondent can decrypt them.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="172"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="175"/>
<source>chat_message_list_not_encrypted_header_message</source>
<extracomment>Messages are not end to end encrypted,
may sure you don&apos;t share any sensitive information !</extracomment>
@ -2483,7 +2483,7 @@ Only your correspondent can decrypt them.</translation>
may sure you don&apos;t share any sensitive information !</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="212"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="215"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation>

View file

@ -2405,44 +2405,44 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="107"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="118"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="110"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="121"/>
<source>popup_info_find_message_title</source>
<extracomment>Find message</extracomment>
<translation>Trouver un message</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="120"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="123"/>
<source>info_popup_no_result_message</source>
<extracomment>No result found</extracomment>
<translation>Aucun résultat trouvé</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="112"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/>
<source>info_popup_first_result_message</source>
<extracomment>First result reached</extracomment>
<translation>Premier résultat atteint</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="110"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="113"/>
<source>info_popup_last_result_message</source>
<extracomment>Last result reached</extracomment>
<translation>Dernier résultat atteint</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="157"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="160"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>Conversation chiffrée de bout en bout</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="159"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="162"/>
<source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment>
<translation>Cette conversation n&apos;est pas chiffrée !</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="170"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="173"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Messages in this conversation are e2e encrypted.
Only your correspondent can decrypt them.</extracomment>
@ -2450,7 +2450,7 @@ Error</extracomment>
en bout. Seul votre correspondant peut les déchiffrer.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="172"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="175"/>
<source>chat_message_list_not_encrypted_header_message</source>
<extracomment>Messages are not end to end encrypted,
may sure you don&apos;t share any sensitive information !</extracomment>
@ -2458,7 +2458,7 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
assurez-vous de ne pas partager dinformations sensibles !</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="212"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="215"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation>

View file

@ -44,6 +44,15 @@ ChatMessageModel::ChatMessageModel(const std::shared_ptr<linphone::ChatMessage>
mEphemeralTimer.stop();
deleteMessageFromChatRoom(false);
});
// We need to force this signal sending because there is no callback to know when a message has been read
connect(CoreModel::getInstance().get(), &CoreModel::chatRoomRead, this,
[this](const std::shared_ptr<linphone::Core> &core, const std::shared_ptr<linphone::ChatRoom> &chatRoom) {
if (chatRoom == mMonitor->getChatRoom()) {
if (mMonitor->isRead()) {
emit messageRead(mMonitor);
}
}
});
}
ChatMessageModel::~ChatMessageModel() {
@ -91,7 +100,7 @@ bool ChatMessageModel::isRead() const {
void ChatMessageModel::markAsRead() {
mMonitor->markAsRead();
emit messageRead();
emit messageRead(mMonitor);
emit CoreModel::getInstance()->messageReadInChatRoom(mMonitor->getChatRoom());
}

View file

@ -65,7 +65,7 @@ public:
signals:
void messageDeleted(bool deletedByUser);
void messageRead();
void messageRead(const std::shared_ptr<linphone::ChatMessage> &chatMessage);
void msgStateChanged(const std::shared_ptr<linphone::ChatMessage> &message, linphone::ChatMessage::State state);
void newMessageReaction(const std::shared_ptr<linphone::ChatMessage> &message,
@ -99,6 +99,7 @@ signals:
private:
linphone::ChatMessage::State mMessageState;
QTimer mEphemeralTimer;
std::weak_ptr<linphone::ChatRoom> mChatRoom;
DECLARE_ABSTRACT_OBJECT

View file

@ -32,7 +32,8 @@ DEFINE_ABSTRACT_OBJECT(ConferenceInfoModel)
ConferenceInfoModel::ConferenceInfoModel(const std::shared_ptr<linphone::ConferenceInfo> &conferenceInfo,
QObject *parent)
: mConferenceInfo(conferenceInfo) {
// TODO : remove cloning when a fix will be done in SDK (#SDK-1001 ticket)
: mConferenceInfo(conferenceInfo->clone()) {
mustBeInLinphoneThread(getClassName());
}

View file

@ -18,7 +18,7 @@ ListView {
property real busyIndicatorSize: Utils.getSizeWithScreenRatio(60)
property bool loading: false
property bool isEncrypted: chat && chat.core.isEncrypted
highlightFollowsCurrentItem: false
highlightFollowsCurrentItem: true
verticalLayoutDirection: ListView.BottomToTop
signal showReactionsForMessageRequested(ChatMessageGui chatMessage)
@ -73,7 +73,7 @@ ListView {
onAtYBeginningChanged: if (atYBeginning && count !== 0) {
eventLogProxy.displayMore()
}
onAtYEndChanged: if (atYEnd && chat) {
onAtYEndChanged: if (atYEnd && chat && count !== 0) {
chat.core.lMarkAsRead()
}
@ -86,10 +86,13 @@ ListView {
onModelAboutToBeReset: {
loading = true
}
onModelReset: {
onModelUpdated: {
loading = false
var index = eventLogProxy.findFirstUnreadIndex()
mainItem.positionViewAtIndex(index, ListView.Contain)
var itemToSelect = mainItem.itemAtIndex(index)
mainItem.positionViewAtIndex(index, ListView.Beginning)
var lastMessage = itemAtIndex(0)
mainItem.lastItemVisible = lastMessage.isFullyVisible
eventLogProxy.markIndexAsRead(index)
}
onEventInsertedByUser: (index) => {
@ -224,7 +227,7 @@ ListView {
indicatorWidth: mainItem.busyIndicatorSize
indicatorColor: DefaultStyle.main1_500_main
}
delegate: DelegateChooser {
role: "eventType"
DelegateChoice {