From 4eb718b02ede38b4204916068bc3514abbb12852 Mon Sep 17 00:00:00 2001 From: Mikhail Barashkov Date: Tue, 14 May 2024 18:00:32 +0300 Subject: [PATCH] Fix scroll to quoted message #566 --- qml/pages/ChatPage.qml | 2 +- src/chatmodel.cpp | 15 +++++++++++++-- src/chatmodel.h | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/qml/pages/ChatPage.qml b/qml/pages/ChatPage.qml index 55278fe..8cafe57 100644 --- a/qml/pages/ChatPage.qml +++ b/qml/pages/ChatPage.qml @@ -417,7 +417,7 @@ Page { chatPage.messageIdToScrollTo = messageId } if (chatPage.messageIdToScrollTo && chatPage.messageIdToScrollTo != "") { - var index = chatModel.getMessageIndex(chatPage.messageIdToScrollTo); + var index = chatModel.getDisplayedMessageIndex(chatPage.messageIdToScrollTo); if(index !== -1) { chatPage.messageIdToScrollTo = ""; chatView.scrollToIndex(index); diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index 7dad231..2c54827 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -472,13 +472,24 @@ QVariantMap ChatModel::getMessage(int index) return QVariantMap(); } -int ChatModel::getMessageIndex(qlonglong messageId) +int ChatModel::getDisplayedMessageIndex(qlonglong messageId) { if (messages.size() == 0) { return -1; } if (messageIndexMap.contains(messageId)) { - return messageIndexMap.value(messageId); + int rawIndex = messageIndexMap.value(messageId); + // We need to substract number of albums which are shown before this item, because that's the index it's displayed on screen at. + int realIndex = rawIndex; + for(int i = 0; i < rawIndex; i++) { + MessageData *message = messages.at(i); + if(message->albumMessageIds.count() > 0) { + realIndex -= (message->albumMessageIds.count() - 1); + } + } + if(realIndex < -1) + return -1; + return realIndex; } return -1; } diff --git a/src/chatmodel.h b/src/chatmodel.h index e2e8bbc..07753b7 100644 --- a/src/chatmodel.h +++ b/src/chatmodel.h @@ -49,7 +49,7 @@ public: Q_INVOKABLE int getLastReadMessageIndex(); Q_INVOKABLE void setSearchQuery(const QString newSearchQuery); - Q_INVOKABLE int getMessageIndex(qlonglong messageId); + Q_INVOKABLE int getDisplayedMessageIndex(qlonglong messageId); QVariantMap smallPhoto() const; qlonglong getChatId() const;